from django.contrib import admin
from django.utils.html import format_html
from .models import NewsCategory, NewsArticle, Event, EventType
from traduction.admin_mixins import TranslatableAdminMixin
from config.admin_mixins import OrderableAdminMixin, IconPickerAdminMixin


@admin.register(NewsCategory)
class NewsCategoryAdmin(IconPickerAdminMixin, OrderableAdminMixin, TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['name', 'icon_preview', 'color_preview', 'order', 'is_active']
    list_editable = ['order', 'is_active']
    prepopulated_fields = {'slug': ('name',)}
    readonly_fields = ['icon_preview_large']

    fieldsets = (
        (None, {
            'fields': ('name', 'slug', 'description')
        }),
        ('Apparence', {
            'fields': ('icon', 'icon_preview_large', 'color'),
            'description': 'Selectionnez une icone et une couleur pour cette categorie.'
        }),
        ('Statut', {
            'fields': ('order', 'is_active')
        }),
    )

    class Media:
        css = {
            'all': [
                'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css',
            ]
        }
        js = [
            'admin/news/js/icon_preview.js',
        ]

    def icon_preview(self, obj):
        """Apercu de l'icone dans la liste."""
        if obj.icon:
            return format_html(
                '<span style="font-size: 20px; color: {};">{}</span>',
                obj.color,
                obj.icon.icon_tag()
            )
        return '-'
    icon_preview.short_description = 'Icone'

    def icon_preview_large(self, obj):
        """Apercu large de l'icone dans le formulaire."""
        if obj.icon:
            return format_html(
                '<div style="display: flex; align-items: center; gap: 15px; padding: 15px; '
                'background: #f8f9fa; border-radius: 8px; border: 1px solid #dee2e6;">'
                '<span style="font-size: 48px; color: {};">{}</span>'
                '<div>'
                '<div style="font-weight: 600; color: #333;">Apercu de l\'icone</div>'
                '<div style="color: #666; font-size: 13px;">Classe: <code>{} {}</code></div>'
                '</div>'
                '</div>',
                obj.color,
                obj.icon.icon_tag(),
                obj.icon.group.libelle,
                obj.icon.libelle
            )
        return format_html(
            '<div style="padding: 15px; background: #f8f9fa; border-radius: 8px; '
            'border: 1px dashed #dee2e6; color: #999; text-align: center;">'
            '<i class="fas fa-image" style="font-size: 24px; margin-bottom: 8px; display: block;"></i>'
            'Aucune icone selectionnee'
            '</div>'
        )
    icon_preview_large.short_description = 'Apercu'

    def color_preview(self, obj):
        """Apercu de la couleur dans la liste."""
        return format_html(
            '<span style="display: inline-block; width: 20px; height: 20px; '
            'background-color: {}; border-radius: 4px; border: 1px solid #ccc;"></span>',
            obj.color
        )
    color_preview.short_description = 'Couleur'


@admin.register(EventType)
class EventTypeAdmin(IconPickerAdminMixin, OrderableAdminMixin, TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['name', 'icon_preview', 'color_preview', 'order', 'is_active']
    list_editable = ['order', 'is_active']
    prepopulated_fields = {'slug': ('name',)}
    search_fields = ['name', 'description']
    list_filter = ['is_active']

    fieldsets = (
        (None, {
            'fields': ('name', 'slug', 'description')
        }),
        ('Apparence', {
            'fields': ('icon', 'color'),
        }),
        ('Statut', {
            'fields': ('order', 'is_active')
        }),
    )

    class Media:
        css = {
            'all': [
                'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css',
            ]
        }

    def icon_preview(self, obj):
        """Apercu de l'icone dans la liste."""
        if obj.icon:
            return format_html(
                '<span style="font-size: 20px; color: {};">{}</span>',
                obj.color,
                obj.icon.icon_tag()
            )
        return '-'
    icon_preview.short_description = 'Icone'

    def color_preview(self, obj):
        """Apercu de la couleur dans la liste."""
        return format_html(
            '<span style="display: inline-block; width: 20px; height: 20px; '
            'background-color: {}; border-radius: 4px; border: 1px solid #ccc;"></span>',
            obj.color
        )
    color_preview.short_description = 'Couleur'


@admin.register(NewsArticle)
class NewsArticleAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['title', 'category', 'author', 'publication_date', 'is_featured', 'is_published', 'view_count']
    list_filter = ['category', 'is_featured', 'is_published', 'publication_date']
    search_fields = ['title', 'content']
    prepopulated_fields = {'slug': ('title',)}
    filter_horizontal = ['related_projects', 'related_people']
    date_hierarchy = 'publication_date'
    list_editable = ['is_featured', 'is_published']

    fieldsets = (
        ('Contenu', {
            'fields': ('title', 'slug', 'content')
        }),
        ('Categorisation', {
            'fields': ('category', 'author')
        }),
        ('Media', {
            'fields': ('image', 'image_caption')
        }),
        ('Relations', {
            'fields': ('related_projects', 'related_people'),
            'classes': ('collapse',)
        }),
        ('Publication', {
            'fields': ('publication_date', 'is_featured', 'is_published')
        }),
        ('SEO', {
            'fields': ('meta_description',),
            'classes': ('collapse',)
        }),
    )


@admin.register(Event)
class EventAdmin(TranslatableAdminMixin, admin.ModelAdmin):
    list_display = ['title', 'event_type', 'event_date', 'location', 'is_online', 'is_featured', 'is_active']
    list_filter = ['event_type', 'is_online', 'is_featured', 'is_active', 'host_university']
    search_fields = ['title', 'description', 'location']
    prepopulated_fields = {'slug': ('title',)}
    date_hierarchy = 'event_date'
    list_editable = ['is_featured', 'is_active']

    fieldsets = (
        ('Informations generales', {
            'fields': ('title', 'slug', 'short_description', 'description', 'event_type')
        }),
        ('Date et lieu', {
            'fields': ('event_date', 'end_date', 'location', 'is_online', 'online_url', 'host_university')
        }),
        ('Media', {
            'fields': ('image',)
        }),
        ('Inscription', {
            'fields': ('registration_url', 'registration_deadline', 'contact_email'),
            'classes': ('collapse',)
        }),
        ('Statut', {
            'fields': ('is_featured', 'is_active')
        }),
    )
