"""
Schémas Pydantic pour la validation des projets
"""
from pydantic import BaseModel, Field
from typing import Optional
from datetime import datetime


class ProjetBase(BaseModel):
    """Schéma de base pour un projet"""
    numero_affaire: str = Field(..., min_length=5, max_length=50)
    nom: str = Field(..., min_length=3, max_length=255)
    couleur: str = Field(default="#4facfe", pattern=r"^#[0-9A-Fa-f]{6}$")
    statut: str = Field(default="en_cours")  # en_cours, valide, archive
    
    client_id: Optional[int] = None
    
    contact_projet_nom: Optional[str] = None
    contact_projet_tel: Optional[str] = None
    contact_chantier_nom: Optional[str] = None
    contact_chantier_tel: Optional[str] = None
    
    adresse_chantier: str
    code_postal_chantier: str = Field(..., min_length=4, max_length=10)
    ville_chantier: str = Field(..., min_length=2, max_length=100)
    
    date_reception_armatures: Optional[datetime] = None
    armaturier: Optional[str] = None
    date_livraison_chantier: Optional[datetime] = None
    consignes_chargement: Optional[str] = None
    consignes_chargement: Optional[str] = None


class ProjetCreate(ProjetBase):
    """Schéma pour créer un projet"""
    pass


class ProjetUpdate(BaseModel):
    """Schéma pour mettre à jour un projet"""
    numero_affaire: Optional[str] = None
    nom: Optional[str] = None
    couleur: Optional[str] = None
    statut: Optional[str] = None
    client_id: Optional[int] = None
    contact_projet_nom: Optional[str] = None
    contact_projet_tel: Optional[str] = None
    contact_chantier_nom: Optional[str] = None
    contact_chantier_tel: Optional[str] = None
    adresse_chantier: Optional[str] = None
    code_postal_chantier: Optional[str] = None
    ville_chantier: Optional[str] = None
    date_reception_armatures: Optional[datetime] = None
    armaturier: Optional[str] = None
    date_livraison_chantier: Optional[datetime] = None
    consignes_chargement: Optional[str] = None
    actif: Optional[int] = None


class ProjetResponse(ProjetBase):
    """Schéma de réponse pour un projet"""
    id: int
    poids_total: float
    nb_transports: int
    convoi_exceptionnel: bool
    date_creation: datetime
    date_modification: datetime
    date_archivage: Optional[datetime] = None
    actif: int
    statut_realisation: Optional[str] = 'en_attente'
    
    class Config:
        from_attributes = True
        
class NiveauBase(BaseModel):
    nom: str
    ordre: int = 0
    date_reception_armatures: Optional[datetime] = None
    armaturier: Optional[str] = None
    date_livraison_chantier: Optional[datetime] = None
    consignes_chargement: Optional[str] = None

class NiveauCreate(NiveauBase):
    projet_id: int

class NiveauUpdate(BaseModel):
    nom: Optional[str] = None
    ordre: Optional[int] = None
    date_reception_armatures: Optional[datetime] = None
    armaturier: Optional[str] = None
    date_livraison_chantier: Optional[datetime] = None
    consignes_chargement: Optional[str] = None

class NiveauResponse(NiveauBase):
    id: int
    projet_id: int
    date_creation: datetime
    class Config:
        from_attributes = True
