"""Fixed-size rolling event log for support diagnostics."""

from __future__ import annotations

import threading
import time
from collections import deque

_MAX_SIZE = 50
_lock = threading.Lock()
_buffer: deque[dict] = deque(maxlen=_MAX_SIZE)


def record(label: str, **meta: str | int | float | None) -> None:
    """Append an entry. Oldest drops when full."""
    with _lock:
        _buffer.append({
            "l": label,
            "t": time.time(),
            **{k: v for k, v in meta.items() if v is not None},
        })


def snapshot() -> list[dict]:
    """Return a copy of the current buffer, oldest first."""
    with _lock:
        return list(_buffer)


def clear() -> None:
    with _lock:
        _buffer.clear()
