from django.contrib import admin
from .models import Evenement, TypeTicket, Ticket, ScanLog

class TypeTicketInline(admin.TabularInline):
    """Permet d'ajouter/éditer les Types de Ticket directement sur la page d'un Événement."""
    model = TypeTicket
    extra = 1 # Affiche un champ vide par défaut pour en ajouter un nouveau
    fields = ('nom', 'prix', 'avantages', 'usage_unique')

@admin.register(Evenement)
class EvenementAdmin(admin.ModelAdmin):
    list_display = ('nom', 'date', 'est_actif')
    list_filter = ('est_actif', 'date')
    search_fields = ('nom',)
    inlines = [TypeTicketInline]

@admin.register(Ticket)
class TicketAdmin(admin.ModelAdmin):
    list_display = ('client_nom', 'type_ticket', 'statut', 'date_emission')
    list_filter = ('statut', 'type_ticket__evenement__nom', 'date_emission')
    search_fields = ('client_nom', 'client_contact', 'code_unique__iexact')
    readonly_fields = ('code_unique', 'qr_code', 'date_emission')
    list_select_related = ('type_ticket__evenement',) # Optimisation: pré-charge l'événement

@admin.register(ScanLog)
class ScanLogAdmin(admin.ModelAdmin):
    list_display = ('ticket', 'date_scan', 'agent_scan', 'resultat')
    list_filter = ('resultat', 'date_scan', 'agent_scan')
    search_fields = ('ticket__client_nom', 'ticket__code_unique__iexact')
    readonly_fields = [f.name for f in ScanLog._meta.get_fields()] # Rend tous les champs non-éditables
    
    def has_add_permission(self, request):
        return False # Personne ne peut créer un log manuellement

    def has_change_permission(self, request, obj=None):
        return False # Personne ne peut modifier un log existant