from django.db import models
from django.utils.text import slugify
from django.utils.translation import gettext_lazy as _  # Important pour les traductions


class Service(models.Model):
    """Services de nettoyage proposés"""
    titre = models.CharField(_('titre'), max_length=200)
    titre_en = models.CharField(_('titre (EN)'), max_length=200, blank=True)
    titre_fr = models.CharField(_('titre (FR)'), max_length=200, blank=True)

    slug = models.SlugField(unique=True, blank=True)

    description_courte = models.TextField(_('description courte'), max_length=300)
    description_courte_en = models.TextField(blank=True)
    description_courte_fr = models.TextField(blank=True)

    description_complete = models.TextField(_('description complète'))
    description_complete_en = models.TextField(blank=True)
    description_complete_fr = models.TextField(blank=True)
    icone = models.CharField(_('icône'), max_length=50, help_text=_("Nom de l'icône (ex: building, spray-can, drone)"))
    image = models.ImageField(_('image'), upload_to='services/', blank=True, null=True)
    ordre = models.IntegerField(_('ordre'), default=0)
    actif = models.BooleanField(_('actif'), default=True)
    created_at = models.DateTimeField(_('créé le'), auto_now_add=True)

    class Meta:
        ordering = ['ordre', 'titre']
        verbose_name = _('Service')
        verbose_name_plural = _('Services')

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.titre)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.titre


class Certification(models.Model):
    """Certifications et accréditations ISO"""
    nom = models.CharField(_('nom'), max_length=200)
    numero = models.CharField(_('numéro'), max_length=100, help_text=_("Ex: ISO 9001:2015"))
    organisme = models.CharField(_('organisme'), max_length=200)
    description = models.TextField(_('description'))
    logo = models.ImageField(_('logo'), upload_to='certifications/', blank=True, null=True)
    date_obtention = models.DateField(_("date d'obtention"))
    date_expiration = models.DateField(_("date d'expiration"), blank=True, null=True)
    document = models.FileField(_('document'), upload_to='certifications/docs/', blank=True, null=True)
    ordre = models.IntegerField(_('ordre'), default=0)

    class Meta:
        ordering = ['ordre', 'nom']
        verbose_name = _('Certification')
        verbose_name_plural = _('Certifications')

    def __str__(self):
        return f"{self.nom} - {self.numero}"


class Projet(models.Model):
    """Portfolio de projets réalisés"""
    CATEGORIE_CHOICES = [
        ('bureau', _('Bureaux')),
        ('industrie', _('Industrie')),
        ('commerce', _('Commerce')),
        ('sante', _('Santé')),
        ('education', _('Éducation')),
        ('facade', _('Façades')),
        ('autre', _('Autre')),
    ]

    titre = models.CharField(_('titre'), max_length=200)
    slug = models.SlugField(unique=True, blank=True)
    client = models.CharField(_('client'), max_length=200, blank=True)
    categorie = models.CharField(_('catégorie'), max_length=50, choices=CATEGORIE_CHOICES)
    description = models.TextField(_('description'))
    superficie = models.CharField(_('superficie'), max_length=100, blank=True, help_text=_("Ex: 5000 m²"))
    duree = models.CharField(_('durée'), max_length=100, blank=True, help_text=_("Ex: 3 mois"))
    services_utilises = models.ManyToManyField(Service, related_name='projets', verbose_name=_('services utilisés'))
    image_principale = models.ImageField(_('image principale'), upload_to='projets/')
    image_avant = models.ImageField(_('image avant'), upload_to='projets/avant/', blank=True, null=True)
    image_apres = models.ImageField(_('image après'), upload_to='projets/apres/', blank=True, null=True)
    date_realisation = models.DateField(_('date de réalisation'))
    mis_en_avant = models.BooleanField(_('mis en avant'), default=False)
    actif = models.BooleanField(_('actif'), default=True)
    created_at = models.DateTimeField(_('créé le'), auto_now_add=True)

    class Meta:
        ordering = ['-date_realisation']
        verbose_name = _('Projet')
        verbose_name_plural = _('Projets')

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.titre)
        super().save(*args, **kwargs)

    def __str__(self):
        return self.titre


class Temoignage(models.Model):
    """Témoignages clients"""
    nom_client = models.CharField(_('nom du client'), max_length=200)
    entreprise = models.CharField(_('entreprise'), max_length=200)
    poste = models.CharField(_('poste'), max_length=200, blank=True)
    temoignage = models.TextField(_('témoignage'))
    note = models.IntegerField(_('note'), choices=[(i, i) for i in range(1, 6)], default=5)
    photo = models.ImageField(_('photo'), upload_to='temoignages/', blank=True, null=True)
    projet = models.ForeignKey(Projet, on_delete=models.SET_NULL, null=True, blank=True, related_name='temoignages',
                               verbose_name=_('projet'))
    date = models.DateField(_('date'), auto_now_add=True)
    actif = models.BooleanField(_('actif'), default=True)

    class Meta:
        ordering = ['-date']
        verbose_name = _('Témoignage')
        verbose_name_plural = _('Témoignages')

    def __str__(self):
        return f"{self.nom_client} - {self.entreprise}"


class DemandeDevis(models.Model):
    """Demandes de devis"""
    TYPE_SERVICE_CHOICES = [
        ('bureau', _('Nettoyage de bureaux')),
        ('industrie', _('Nettoyage industriel')),
        ('facade', _('Nettoyage de façades')),
        ('vitre', _('Nettoyage de vitres')),
        ('desinfection', _('Désinfection')),
        ('autre', _('Autre')),
    ]

    nom = models.CharField(_('nom'), max_length=200)
    entreprise = models.CharField(_('entreprise'), max_length=200, blank=True)
    email = models.EmailField(_('email'))
    telephone = models.CharField(_('téléphone'), max_length=20)
    type_service = models.CharField(_('type de service'), max_length=50, choices=TYPE_SERVICE_CHOICES)
    surface = models.CharField(_('surface'), max_length=100, blank=True, help_text=_("Surface approximative"))
    frequence = models.CharField(_('fréquence'), max_length=100, blank=True,
                                 help_text=_("Quotidien, Hebdomadaire, Mensuel..."))
    message = models.TextField(_('message'))
    date_souhaitee = models.DateField(_('date souhaitée'), blank=True, null=True)
    created_at = models.DateTimeField(_('créé le'), auto_now_add=True)
    traitee = models.BooleanField(_('traitée'), default=False)

    class Meta:
        ordering = ['-created_at']
        verbose_name = _('Demande de devis')
        verbose_name_plural = _('Demandes de devis')

    def __str__(self):
        return f"{self.nom} - {self.type_service} ({self.created_at.strftime('%d/%m/%Y')})"


class Contact(models.Model):
    """Messages de contact"""
    nom = models.CharField(_('nom'), max_length=200)
    email = models.EmailField(_('email'))
    telephone = models.CharField(_('téléphone'), max_length=20, blank=True)
    sujet = models.CharField(_('sujet'), max_length=200)
    message = models.TextField(_('message'))
    created_at = models.DateTimeField(_('créé le'), auto_now_add=True)
    lu = models.BooleanField(_('lu'), default=False)

    class Meta:
        ordering = ['-created_at']
        verbose_name = _('Message de contact')
        verbose_name_plural = _('Messages de contact')

    def __str__(self):
        return f"{self.nom} - {self.sujet}"


class Configuration(models.Model):
    """Configuration du site"""
    nom_entreprise = models.CharField(_("nom de l'entreprise"), max_length=200, default="Vigilus Nettoyage")
    slogan = models.CharField(_('slogan'), max_length=300, default="Excellence en nettoyage professionnel")
    telephone = models.CharField(_('téléphone'), max_length=20)
    email = models.EmailField(_('email'))
    adresse = models.TextField(_('adresse'))
    horaires = models.TextField(_('horaires'), help_text=_("Horaires d'ouverture"))
    facebook_url = models.URLField(_('URL Facebook'), blank=True)
    linkedin_url = models.URLField(_('URL LinkedIn'), blank=True)
    instagram_url = models.URLField(_('URL Instagram'), blank=True)
    twitter_url = models.URLField(_('URL Twitter'), blank=True)
    logo = models.ImageField(_('logo'), upload_to='config/', blank=True, null=True)
    favicon = models.ImageField(_('favicon'), upload_to='config/', blank=True, null=True)

    class Meta:
        verbose_name = _('Configuration')
        verbose_name_plural = _('Configuration')

    def __str__(self):
        return self.nom_entreprise