"""会话级线程安全队列。

职责概览：
- 为单个请求/连接提供 FIFO 队列。
- 支持 put/get/try_get，确保音频片段按时间顺序处理。
"""

from dataclasses import dataclass
from queue import Empty, Queue
from typing import Generic, Optional, TypeVar

T = TypeVar("T")


@dataclass
class QueueChunk:
    seq: int
    payload: bytes
    duration_sec: float


class SessionChunkQueue(Generic[T]):
    """Session-scoped FIFO queue with thread-safe put/get operations."""
    # 每个请求/连接持有自己的队列实例，避免跨会话数据串扰。

    def __init__(self) -> None:
        self._queue: Queue[T] = Queue()

    def put(self, item: T) -> None:
        self._queue.put(item)

    def get(self, timeout: Optional[float] = None) -> T:
        if timeout is None:
            return self._queue.get()
        return self._queue.get(timeout=timeout)

    def try_get(self) -> Optional[T]:
        try:
            return self._queue.get_nowait()
        except Empty:
            return None

    def qsize(self) -> int:
        return self._queue.qsize()

    def empty(self) -> bool:
        return self._queue.empty()
