from pydantic import BaseModel from typing import Optional, List from datetime import datetime class AchievementBase(BaseModel): name: str description: str icon: str condition_type: str condition_value: int = 1 category_id: Optional[int] = None class AchievementCreate(AchievementBase): pass class AchievementResponse(AchievementBase): id: int created_at: datetime class Config: from_attributes = True class PlayerAchievement(BaseModel): """Logro desbloqueado por un jugador (almacenado en localStorage)""" achievement_id: int unlocked_at: datetime game_session_id: Optional[int] = None class AchievementUnlock(BaseModel): """Evento emitido cuando se desbloquea un logro""" player_name: str achievement: AchievementResponse unlocked_at: datetime class PlayerStats(BaseModel): """Estadisticas de jugador para calculo de logros""" player_name: str current_streak: int = 0 total_correct: int = 0 total_steals: int = 0 successful_steals: int = 0 category_correct: dict[int, int] = {} # category_id -> count fastest_answer_seconds: Optional[float] = None questions_500_correct: int = 0