from django.db import models
from django.core.exceptions import ValidationError
from mediautils.utils import upload_to_favicon

class SiteSetting(models.Model):
    """
    Modèle Singleton pour la configuration globale du site.
    """
    # SEO & Identité
    site_title = models.CharField("Titre du site (Browser)", max_length=100, default="Mon Portfolio - Architecte Logiciel")
    favicon = models.ImageField("Favicon (Onglet)", upload_to=upload_to_favicon, blank=True, null=True, help_text="Format .png ou .ico, taille 32x32 ou 64x64.")
    meta_description = models.CharField("Meta Description (SEO)", max_length=250, blank=True, help_text="Description courte pour Google.")
    
    # Contenu global
    footer_text = models.CharField("Texte Footer", max_length=200, default="© 2025 - Développé avec Django.")
    
    # Options techniques
    maintenance_mode = models.BooleanField("Mode Maintenance", default=False, help_text="Si coché, le site sera inaccessible au public.")
    
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = "Configuration Générale"
        verbose_name_plural = "Configuration Générale"

    def save(self, *args, **kwargs):
        if not self.pk and SiteSetting.objects.exists():
            raise ValidationError("Une configuration existe déjà.")
        super().save(*args, **kwargs)

    def __str__(self):
        return f"Paramètres du site ({self.site_title})"