from django.contrib import admin
from django.contrib.contenttypes.models import ContentType
from django.utils.html import format_html

from .models import Language, Dictionnaire, Traducteur
from .admin_mixins import TranslatableAdminMixin

# Import du helper pour les drapeaux
try:
    from config.templatetags.config_tags import get_country_name
except ImportError:
    def get_country_name(code):
        return code.upper()


@admin.register(Language)
class LanguageAdmin(admin.ModelAdmin):
    list_display = ['name', 'code', 'native_name', 'flag_display', 'is_default', 'is_active', 'order']
    list_filter = ['is_active', 'is_default']
    list_editable = ['order', 'is_active']
    search_fields = ['name', 'code', 'native_name']
    ordering = ['order', 'name']

    fieldsets = (
        (None, {
            'fields': ('code', 'name', 'native_name')
        }),
        ('Affichage', {
            'fields': ('flag_code', 'order')
        }),
        ('Options', {
            'fields': ('is_default', 'is_active')
        }),
    )

    def flag_display(self, obj):
        if obj.flag_code:
            code_lower = obj.flag_code.lower()
            country_name = get_country_name(code_lower)
            return format_html(
                '<img src="https://flagcdn.com/w40/{}.png" alt="{}" '
                'style="height: 20px; vertical-align: middle;" /> {}',
                code_lower,
                country_name,
                obj.flag_code.upper()
            )
        return format_html(
            '<span style="color: #dc3545;">&#10007; Non defini</span>'
        )
    flag_display.short_description = 'Drapeau'


@admin.register(Dictionnaire)
class DictionnaireAdmin(admin.ModelAdmin):
    list_display = ['get_model_display', 'object_id', 'field', 'language', 'translation_preview', 'updated_at']
    list_filter = ['language', 'content_type', 'field']
    search_fields = ['translation', 'field']
    readonly_fields = ['created_at', 'updated_at']
    ordering = ['-updated_at']

    fieldsets = (
        ('Objet source', {
            'fields': ('content_type', 'object_id', 'field')
        }),
        ('Traduction', {
            'fields': ('language', 'translation')
        }),
        ('Metadonnees', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )

    def get_model_display(self, obj):
        return f"{obj.content_type.app_label}.{obj.content_type.model}"
    get_model_display.short_description = 'Modele'
    get_model_display.admin_order_field = 'content_type'

    def translation_preview(self, obj):
        if len(obj.translation) > 50:
            return f"{obj.translation[:50]}..."
        return obj.translation
    translation_preview.short_description = 'Traduction'

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


# Admin action pour supprimer les traductions orphelines
@admin.action(description='Supprimer les traductions orphelines')
def delete_orphan_translations(modeladmin, request, queryset):
    """Supprime les traductions dont l'objet source n'existe plus"""
    deleted_count = 0
    for translation in queryset:
        content_type = translation.content_type
        model_class = content_type.model_class()
        if model_class:
            if not model_class.objects.filter(pk=translation.object_id).exists():
                translation.delete()
                deleted_count += 1

    modeladmin.message_user(
        request,
        f"{deleted_count} traduction(s) orpheline(s) supprimee(s)."
    )




@admin.register(Traducteur)
class TraducteurAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['key', 'get_value', ]
    list_filter = ['key', ]
    ordering = ['key',]
    search_fields = ['key', ]