"""
Schémas Pydantic pour la validation des catégories
"""
from pydantic import BaseModel, Field
from typing import Optional, List


class CategorieBase(BaseModel):
    """Schéma de base pour une catégorie"""
    nom: str = Field(..., min_length=2, max_length=100)
    icone: Optional[str] = Field(None, max_length=10)
    niveau: int = Field(default=1, ge=1, le=3)
    parent_id: Optional[int] = None


class CategorieCreate(CategorieBase):
    """Schéma pour créer une catégorie"""
    pass


class CategorieUpdate(BaseModel):
    """Schéma pour mettre à jour une catégorie"""
    nom: Optional[str] = None
    icone: Optional[str] = None
    niveau: Optional[int] = None
    parent_id: Optional[int] = None


class CategorieResponse(CategorieBase):
    """Schéma de réponse pour une catégorie"""
    id: int
    chemin_complet: str
    
    class Config:
        from_attributes = True


class CategorieArbre(CategorieResponse):
    """Schéma pour l'arborescence des catégories"""
    enfants: List['CategorieArbre'] = []
    nombre_articles: int = 0
    
    class Config:
        from_attributes = True


# Nécessaire pour les références circulaires
CategorieArbre.model_rebuild()
