"""
Schémas Pydantic pour les badges
"""
from pydantic import BaseModel, Field
from typing import List, Optional, Dict, Any
from datetime import datetime


class BadgeBase(BaseModel):
    """Schéma de base pour un badge"""
    name: str = Field(..., description="Nom du badge")
    description: str = Field(..., description="Description du badge")
    icon: str = Field(..., description="Icône ou emoji du badge")
    category: str = Field(..., description="Catégorie du badge (predictions, accuracy, engagement, social)")
    criteriaType: str = Field(..., description="Type de critère")
    criteriaValue: int = Field(..., description="Valeur du critère")
    criteriaDescription: str = Field(..., description="Description du critère")
    rarity: str = Field(..., description="Rareté du badge (common, rare, epic, legendary)")
    points: int = Field(..., description="Points attribués pour le badge")


class BadgeResponse(BadgeBase):
    """Réponse avec un badge"""
    id: int
    badgeId: str
    createdAt: str
    unlocked: Optional[bool] = None  # Indique si le badge est débloqué par l'utilisateur


class BadgeListResponse(BaseModel):
    """Réponse avec une liste de badges"""
    data: List[BadgeResponse]
    meta: Dict[str, Any]


class UserBadgeResponse(BaseModel):
    """Réponse avec un badge d'utilisateur"""
    id: int
    userId: int
    badgeId: int
    unlockedAt: str
    badge: Dict[str, Any]


class UserBadgeListResponse(BaseModel):
    """Réponse avec une liste de badges d'utilisateur"""
    data: Dict[str, Any]
    meta: Dict[str, Any]


class BadgeUnlockRequest(BaseModel):
    """Requête pour débloquer un badge"""
    userId: int = Field(..., description="ID de l'utilisateur")
    badgeId: str = Field(..., description="ID du badge à débloquer")


class BadgeCheckResponse(BaseModel):
    """Réponse après vérification des badges"""
    data: Dict[str, Any]
    meta: Dict[str, Any]
