from pydantic import BaseModel
from datetime import datetime


# === Token schemas ===

class WidgetTokenCreate(BaseModel):
    """Создание токена виджета"""
    pass  # Не требует параметров


class WidgetTokenResponse(BaseModel):
    """Ответ с токеном виджета"""
    id: int
    token: str
    created_at: datetime
    expires_at: datetime | None
    is_active: bool
    urls: dict[str, str]  # Готовые URL для виджетов

    class Config:
        from_attributes = True


class WidgetTokenListItem(BaseModel):
    """Элемент списка токенов"""
    id: int
    token: str
    created_at: datetime
    is_active: bool

    class Config:
        from_attributes = True


# === Widget data schemas ===

class WidgetLeaderboardEntry(BaseModel):
    """Запись в лидерборде виджета"""
    rank: int
    nickname: str
    avatar_url: str | None
    total_points: int
    current_streak: int
    is_current_user: bool  # Для подсветки


class WidgetLeaderboardResponse(BaseModel):
    """Ответ лидерборда для виджета"""
    entries: list[WidgetLeaderboardEntry]
    current_user_rank: int | None
    total_participants: int
    marathon_title: str


class WidgetCurrentResponse(BaseModel):
    """Текущее задание для виджета"""
    has_assignment: bool
    game_title: str | None = None
    game_cover_url: str | None = None
    assignment_type: str | None = None  # "challenge" | "playthrough"
    challenge_title: str | None = None
    challenge_description: str | None = None
    points: int | None = None
    difficulty: str | None = None  # easy, medium, hard
    bonus_completed: int | None = None  # Для прохождений
    bonus_total: int | None = None


class WidgetProgressResponse(BaseModel):
    """Прогресс участника для виджета"""
    nickname: str
    avatar_url: str | None
    rank: int
    total_points: int
    current_streak: int
    completed_count: int
    dropped_count: int
    marathon_title: str
