"""
Modèle SQLAlchemy pour les clients
"""
from sqlalchemy import Column, Integer, String, Float, DateTime, Text
from datetime import datetime
from app.database import Base


class Client(Base):
    """
    Client de l'entreprise
    Stocke toutes les informations commerciales
    """
    __tablename__ = "clients"
    
    # Identification
    id = Column(Integer, primary_key=True, index=True)
    raison_sociale = Column(String(255), nullable=False, index=True)
    forme_juridique = Column(String(50), nullable=True)  # SAS, SARL, SA, etc.
    siret = Column(String(14), unique=True, nullable=True)
    numero_tva = Column(String(20), nullable=True)
    
    # Adresse
    adresse = Column(String(255), nullable=False)
    code_postal = Column(String(10), nullable=False)
    ville = Column(String(100), nullable=False)
    pays = Column(String(100), default="France")
    
    # Contact principal
    civilite_contact = Column(String(10), nullable=True)  # M., Mme.
    prenom_contact = Column(String(100), nullable=True)
    nom_contact = Column(String(100), nullable=True)
    telephone = Column(String(20), nullable=False)
    email = Column(String(255), nullable=True)
    poste_contact = Column(String(100), nullable=True)
    
    # Conditions commerciales
    delai_paiement = Column(String(100), default="30 jours fin de mois")
    remise_pourcentage = Column(Float, default=0.0)
    notes_commerciales = Column(Text, nullable=True)
    
    # Statistiques
    nombre_projets = Column(Integer, default=0)
    
    # Métadonnées
    date_creation = Column(DateTime, default=datetime.utcnow)
    date_modification = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    consignes_chargement = Column(Text, nullable=True)
    actif = Column(Integer, default=1)  # 1=actif, 0=archivé
    
    def __repr__(self):
        return f"<Client {self.raison_sociale}>"
    
    @property
    def nom_complet_contact(self):
        """Retourne le nom complet du contact"""
        parts = []
        if self.civilite_contact:
            parts.append(self.civilite_contact)
        if self.prenom_contact:
            parts.append(self.prenom_contact)
        parts.append(self.nom_contact)
        return " ".join(parts)
    
    @property
    def ville_complete(self):
        """Retourne la ville avec code postal"""
        return f"{self.ville} ({self.code_postal[:2]})"
