from django.contrib import admin
from django.utils.html import format_html
from .models import Station, Service, Actualite, PrixCarburant, Contact, Statistique


@admin.register(Service)
class ServiceAdmin(admin.ModelAdmin):
    list_display = ['nom', 'categorie', 'ordre', 'est_actif', 'created_at']
    list_filter = ['categorie', 'est_actif', 'created_at']
    search_fields = ['nom', 'description', 'description_courte']
    list_editable = ['ordre', 'est_actif']
    prepopulated_fields = {'slug': ('nom',)}
    date_hierarchy = 'created_at'

    fieldsets = (
        ('Informations générales', {
            'fields': ('nom', 'slug', 'categorie', 'ordre', 'est_actif')
        }),
        ('Contenu', {
            'fields': ('description_courte', 'description')
        }),
        ('Média', {
            'fields': ('image', 'icone')
        }),
    )

    def get_queryset(self, request):
        return super().get_queryset(request).select_related()


@admin.register(Station)
class StationAdmin(admin.ModelAdmin):
    list_display = ['nom', 'ville', 'region', 'telephone', 'est_active', 'created_at']
    list_filter = ['est_active', 'region', 'ville', 'created_at']
    search_fields = ['nom', 'adresse', 'ville', 'region', 'telephone', 'email']
    list_editable = ['est_active']
    filter_horizontal = ['services']
    date_hierarchy = 'created_at'

    fieldsets = (
        ('Informations générales', {
            'fields': ('nom', 'est_active')
        }),
        ('Localisation', {
            'fields': ('adresse', 'ville', 'region', 'latitude', 'longitude')
        }),
        ('Contact', {
            'fields': ('telephone', 'email')
        }),
        ('Services et informations', {
            'fields': ('services', 'horaires', 'date_ouverture')
        }),
        ('Média', {
            'fields': ('image',)
        }),
    )

    def get_queryset(self, request):
        return super().get_queryset(request).prefetch_related('services')


@admin.register(Actualite)
class ActualiteAdmin(admin.ModelAdmin):
    list_display = ['titre', 'type_actualite', 'est_publie', 'est_epingle', 'date_publication', 'vues', 'created_at']
    list_filter = ['type_actualite', 'est_publie', 'est_epingle', 'date_publication', 'created_at']
    search_fields = ['titre', 'resume', 'contenu', 'auteur']
    list_editable = ['est_publie', 'est_epingle']
    prepopulated_fields = {'slug': ('titre',)}
    date_hierarchy = 'date_publication'
    readonly_fields = ['vues', 'created_at', 'updated_at']

    fieldsets = (
        ('Informations générales', {
            'fields': ('titre', 'slug', 'type_actualite', 'auteur')
        }),
        ('Contenu', {
            'fields': ('resume', 'contenu')
        }),
        ('Média', {
            'fields': ('image_principale', 'image_alt', 'fichier_joint')
        }),
        ('Publication', {
            'fields': ('est_publie', 'est_epingle', 'date_publication')
        }),
        ('Statistiques', {
            'fields': ('vues', 'created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )

    def save_model(self, request, obj, form, change):
        if not change:
            obj.auteur = request.user.get_full_name() or request.user.username
        super().save_model(request, obj, form, change)


@admin.register(PrixCarburant)
class PrixCarburantAdmin(admin.ModelAdmin):
    list_display = ['type_carburant', 'prix_display', 'date_application', 'date_fin', 'est_actuel', 'created_at']
    list_filter = ['type_carburant', 'est_actuel', 'date_application']
    search_fields = ['type_carburant']
    list_editable = ['est_actuel']
    date_hierarchy = 'date_application'

    fieldsets = (
        ('Carburant', {
            'fields': ('type_carburant', 'prix')
        }),
        ('Période', {
            'fields': ('date_application', 'date_fin', 'est_actuel')
        }),
    )

    def prix_display(self, obj):
        return format_html(
            '<strong style="color: #f59e0b;">{} FCFA</strong>',
            obj.prix
        )

    prix_display.short_description = 'Prix'

    def save_model(self, request, obj, form, change):
        if obj.est_actuel:
            PrixCarburant.objects.filter(
                type_carburant=obj.type_carburant,
                est_actuel=True
            ).exclude(id=obj.id).update(est_actuel=False)
        super().save_model(request, obj, form, change)


@admin.register(Contact)
class ContactAdmin(admin.ModelAdmin):
    list_display = ['nom_complet', 'email', 'telephone', 'sujet', 'est_traite', 'created_at']
    list_filter = ['est_traite', 'created_at']
    search_fields = ['nom_complet', 'email', 'telephone', 'entreprise', 'sujet', 'message']
    list_editable = ['est_traite']
    readonly_fields = ['created_at', 'nom_complet', 'email', 'telephone', 'entreprise', 'sujet', 'message']
    date_hierarchy = 'created_at'

    fieldsets = (
        ('Informations du contact', {
            'fields': ('nom_complet', 'email', 'telephone', 'entreprise')
        }),
        ('Message', {
            'fields': ('sujet', 'message')
        }),
        ('Traitement', {
            'fields': ('est_traite', 'reponse', 'date_traitement')
        }),
        ('Date', {
            'fields': ('created_at',),
            'classes': ('collapse',)
        }),
    )

    def has_add_permission(self, request):
        return False

    def has_delete_permission(self, request, obj=None):
        return True


@admin.register(Statistique)
class StatistiqueAdmin(admin.ModelAdmin):
    list_display = ['libelle', 'valeur_display', 'unite', 'ordre', 'est_actif']
    list_filter = ['est_actif']
    search_fields = ['libelle']
    list_editable = ['ordre', 'est_actif']

    fieldsets = (
        ('Contenu', {
            'fields': ('libelle', 'valeur', 'unite', 'icone')
        }),
        ('Affichage', {
            'fields': ('ordre', 'est_actif')
        }),
    )

    def valeur_display(self, obj):
        return format_html(
            '<strong style="color: #f59e0b; font-size: 16px;">{}{}</strong>',
            obj.valeur,
            obj.unite
        )

    valeur_display.short_description = 'Valeur'


# Personnalisation de l'interface admin
admin.site.site_header = "Administration Bilal Oil"
admin.site.site_title = "Bilal Oil Admin"
admin.site.index_title = "Gestion du site Bilal Oil"