import uuid
from django.db import models
from cloudinary_storage.storage import MediaCloudinaryStorage

class Evenement(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    titre = models.CharField(max_length=200, verbose_name="Titre de l'événement")
    description = models.TextField(blank=True, verbose_name="Description générale")
    date_debut = models.DateTimeField(verbose_name="Date d'ouverture des votes")
    date_fin = models.DateTimeField(verbose_name="Date de clôture")
    logo = models.ImageField(upload_to='logos/', blank=True, null=True, storage=MediaCloudinaryStorage())
    is_active = models.BooleanField(default=True, verbose_name="Afficher sur le site")

    class Meta:
        verbose_name = "Événement"
        verbose_name_plural = "Événements"
        ordering = ['-date_debut']

    def __str__(self):
        return self.titre

class Categorie(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    evenement = models.ForeignKey(Evenement, on_delete=models.CASCADE, related_name='categories')
    nom = models.CharField(max_length=100, verbose_name="Nom de la catégorie")
    description = models.TextField(blank=True)
    ordre = models.PositiveIntegerField(default=0, verbose_name="Ordre d'affichage")

    class Meta:
        verbose_name = "Catégorie"
        verbose_name_plural = "Catégories"
        ordering = ['ordre']

    def __str__(self):
        return f"{self.nom} ({self.evenement.titre})"

class Candidat(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    categorie = models.ForeignKey(Categorie, on_delete=models.CASCADE, related_name='candidats')
    nom_complet = models.CharField(max_length=200, verbose_name="Nom du candidat / projet")
    biographie = models.TextField(blank=True, verbose_name="Bio / Présentation")
    photo = models.ImageField(upload_to='candidats/', storage=MediaCloudinaryStorage())
    ordre = models.PositiveIntegerField(default=0, verbose_name="Ordre d'affichage")

    class Meta:
        verbose_name = "Candidat"
        verbose_name_plural = "Candidats"
        ordering = ['ordre']

    def __str__(self):
        return self.nom_complet