from django.contrib import admin
from django.core.exceptions import ImproperlyConfigured
from .models import Service, Certification, Projet, Temoignage, DemandeDevis, Contact, Configuration


try:
    from modeltranslation.admin import TranslationAdmin
    from modeltranslation.translator import translator


    class BaseTranslationAdmin(TranslationAdmin):
        class Media:
            js = (
                'modeltranslation/js/force_jquery.js',
                '//ajax.googleapis.com/ajax/libs/jquery/jquery.min.js',
                'modeltranslation/js/tabbed_translation_fields.js',
            )
            css = {
                'screen': ('modeltranslation/css/tabbed_translation_fields.css',),
            }


    # Vérifier que les modèles sont enregistrés pour la traduction
    TRANSLATION_AVAILABLE = True
    for model in [Service, Certification, Projet, Temoignage, Configuration]:
        try:
            translator.get_options_for_model(model)
        except:
            TRANSLATION_AVAILABLE = False
            break

except (ImportError, ImproperlyConfigured):
    # Fallback si modeltranslation n'est pas installé
    class BaseTranslationAdmin(admin.ModelAdmin):
        pass
    TRANSLATION_AVAILABLE = False


@admin.register(Service)
class ServiceAdmin(BaseTranslationAdmin if TRANSLATION_AVAILABLE else admin.ModelAdmin):
    list_display = ['titre', 'ordre', 'actif', 'created_at']
    list_filter = ['actif']
    search_fields = [
        'titre', 'titre_en', 'titre_fr',
        'description_courte', 'description_courte_en', 'description_courte_fr',
        'description_complete', 'description_complete_en', 'description_complete_fr',
    ]
    prepopulated_fields = {'slug': ('titre',)}
    list_editable = ['ordre', 'actif']


@admin.register(Certification)
class CertificationAdmin(BaseTranslationAdmin if TRANSLATION_AVAILABLE else admin.ModelAdmin):
    list_display = ['nom', 'numero', 'organisme', 'date_obtention', 'ordre']
    list_filter = ['organisme', 'date_obtention']
    search_fields = ['nom', 'numero', 'organisme', 'description']
    list_editable = ['ordre']
    date_hierarchy = 'date_obtention'


@admin.register(Projet)
class ProjetAdmin(BaseTranslationAdmin if TRANSLATION_AVAILABLE else admin.ModelAdmin):
    list_display = ['titre', 'client', 'categorie', 'date_realisation', 'mis_en_avant', 'actif']
    list_filter = ['categorie', 'mis_en_avant', 'actif', 'date_realisation']
    search_fields = ['titre', 'client', 'description']
    prepopulated_fields = {'slug': ('titre',)}
    list_editable = ['mis_en_avant', 'actif']
    filter_horizontal = ['services_utilises']
    date_hierarchy = 'date_realisation'


@admin.register(Temoignage)
class TemoignageAdmin(BaseTranslationAdmin if TRANSLATION_AVAILABLE else admin.ModelAdmin):
    list_display = ['nom_client', 'entreprise', 'note', 'date', 'actif']
    list_filter = ['note', 'actif', 'date']
    search_fields = ['nom_client', 'entreprise', 'temoignage']
    list_editable = ['actif']
    date_hierarchy = 'date'


@admin.register(DemandeDevis)
class DemandeDevisAdmin(admin.ModelAdmin):
    list_display = ['nom', 'entreprise', 'type_service', 'telephone', 'created_at', 'traitee']
    list_filter = ['type_service', 'traitee', 'created_at']
    search_fields = ['nom', 'entreprise', 'email', 'telephone']
    list_editable = ['traitee']
    date_hierarchy = 'created_at'
    readonly_fields = ['created_at']


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


@admin.register(Configuration)
class ConfigurationAdmin(BaseTranslationAdmin if TRANSLATION_AVAILABLE else admin.ModelAdmin):
    list_display = ['nom_entreprise', 'telephone', 'email']

    def has_add_permission(self, request):
        return not Configuration.objects.exists()

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