import urllib.parse
from django.views.generic import TemplateView, DetailView
from django.shortcuts import get_object_or_404
from core.models import Evenement, TypeTicket

class HomeView(TemplateView):
    """Affiche la page d'accueil avec les événements actifs."""
    template_name = 'vitrine/home.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # Optimisation cruciale : prefetch_related évite de faire une requête SQL
        # par événement pour récupérer ses types de tickets (problème N+1).
        context['evenements'] = Evenement.objects.filter(
            est_actif=True
        ).prefetch_related('types_tickets')
        return context


class EventDetailView(DetailView):
    """Affiche les détails complets d'un seul événement."""
    model = Evenement
    template_name = 'vitrine/event_detail.html'
    context_object_name = 'evenement'

    def get_queryset(self):
        # On s'assure que seuls les événements actifs sont accessibles via leur URL directe.
        return Evenement.objects.filter(est_actif=True)


class WhatsAppInstructionView(TemplateView):
    """
    Page intermédiaire qui prépare et affiche les instructions
    avant de rediriger l'utilisateur vers WhatsApp.
    """
    template_name = 'vitrine/whatsapp_instruction.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        event_pk = self.kwargs.get('event_pk')
        ticket_pk = self.kwargs.get('ticket_pk')

        # Récupération sécurisée des objets
        type_ticket = get_object_or_404(
            TypeTicket, 
            pk=ticket_pk, 
            evenement__pk=event_pk, 
            evenement__est_actif=True
        )
        
        context['type_ticket'] = type_ticket
        
        # Construction du message pré-rempli pour WhatsApp
        # Le formatage avec les emojis est défini ici, dans la logique métier.
        message = (
            f"Bonjour , je souhaite acheter :\n\n"
            f" 1 Ticket {type_ticket.nom} - {type_ticket.evenement.nom}\n"
            f" Prix : {type_ticket.prix} FCFA\n\n"
            f"Merci de m'indiquer les coordonnées de virement. "
        )
        
        # Encodage du message pour qu'il soit compatible avec une URL
        # et ajout au contexte pour le template.
        context['whatsapp_message_encoded'] = urllib.parse.quote(message)
        
        # TODO: Le numéro de téléphone de l'admin doit être stocké en base de données
        # ou dans les settings, pas en dur dans le template.
        # Pour l'instant, on peut le passer au contexte.
        # context['admin_whatsapp_number'] = "229XXXXXXXX" 

        return context