from django.utils import timezone
from nominations.models import Evenement, Categorie
from ballot.models import Vote
from django.db.models import Count

def get_active_events():
    """Liste des événements visibles en page d'accueil."""
    return Evenement.objects.filter(is_active=True).order_by('date_fin')

def get_event_with_details(event_id):
    """Récupère l'événement avec ses catégories et candidats en une seule requête."""
    return Evenement.objects.prefetch_related('categories__candidats').get(id=event_id)

def get_event_results(event_id):
    """Calcule le podium par catégorie pour un événement clos."""
    categories = Categorie.objects.filter(evenement_id=event_id)
    results = {}
    for cat in categories:
        # On récupère le Top 3 des candidats par nombre de votes
        results[cat] = Vote.objects.filter(categorie=cat) \
            .values('candidat__nom_complet', 'candidat__photo') \
            .annotate(nb_votes=Count('id')) \
            .order_by('-nb_votes')[:3]
    return results