import uuid from datetime import datetime, timezone from typing import Optional from pydantic import BaseModel, Field class Track(BaseModel): id: str = Field(default_factory=lambda: str(uuid.uuid4())) title: str duration: Optional[int] = None stream_url: str thumbnail: Optional[str] = None source_id: str webpage_url: str added_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) class QueueState(BaseModel): queue: list[Track] = [] current_track: Optional[Track] = None paused: bool = False playback_time: float = 0.0 nicknames: dict[str, str] = {} held_nicknames: dict[str, str] = {} class WSMessage(BaseModel): type: str payload: Optional[dict] = {}