"""
Modèle SQLAlchemy pour les archives de projets
"""
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Text
from sqlalchemy.orm import relationship
from datetime import datetime
from app.database import Base


class ArchiveProjet(Base):
    """
    Archive d'un projet livré
    Contient les informations historiques
    """
    __tablename__ = "archives_projets"
    
    id = Column(Integer, primary_key=True, index=True)
    
    # Identification
    nom_projet = Column(String(255), nullable=False)
    client_id = Column(Integer, ForeignKey("clients.id"), nullable=False)
    annee = Column(Integer, nullable=False, index=True)
    
    # Détails
    date_livraison = Column(DateTime, nullable=True)
    nombre_pieces = Column(Integer, default=0)
    montant_ht = Column(Float, default=0.0)
    statut = Column(String(50), default="Livré")  # Livré, En cours, Annulé
    
    # Métadonnées
    date_archivage = Column(DateTime, default=datetime.utcnow)
    notes = Column(Text, nullable=True)
    
    # Relation
    client = relationship("Client")
    
    def __repr__(self):
        return f"<ArchiveProjet {self.nom_projet} - {self.annee}>"
    
    @property
    def nom_tronque(self):
        """Retourne le nom du projet tronqué pour l'affichage"""
        if len(self.nom_projet) > 20:
            return self.nom_projet[:17] + "…"
        return self.nom_projet


class FeuilleProduction(Base):
    """
    Feuille de production mensuelle
    Contient les statistiques de production
    """
    __tablename__ = "feuilles_production"
    
    id = Column(Integer, primary_key=True, index=True)
    
    # Période
    annee = Column(Integer, nullable=False, index=True)
    mois = Column(Integer, nullable=False)  # 1-12
    
    # Statistiques
    volume_beton_m3 = Column(Float, default=0.0)
    nombre_pieces = Column(Integer, default=0)
    conformite_pourcentage = Column(Float, default=100.0)
    
    # Métadonnées
    date_creation = Column(DateTime, default=datetime.utcnow)
    notes = Column(Text, nullable=True)
    
    def __repr__(self):
        return f"<FeuilleProduction {self.mois}/{self.annee}>"
    
    @property
    def mois_nom(self):
        """Retourne le nom du mois"""
        mois_noms = [
            "Janvier", "Février", "Mars", "Avril", "Mai", "Juin",
            "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
        ]
        return f"{mois_noms[self.mois - 1]} {self.annee}"
    
    @property
    def badge_conformite(self):
        """Retourne le badge de conformité"""
        if self.conformite_pourcentage >= 98:
            return {"class": "bok", "text": f"{self.conformite_pourcentage}%"}
        else:
            return {"class": "blo", "text": f"{self.conformite_pourcentage}%"}
