from django.contrib import admin
from .models import *
from django.utils.safestring import mark_safe
from modeltranslation.admin import TranslationAdmin
from modeltranslation.admin import TranslationStackedInline


# Кастомынй порядок категорий
original_get_app_list = admin.AdminSite.get_app_list


def custom_get_app_list(self, request, app_label=None):
    app_list = original_get_app_list(self, request, app_label)
# Сортируем модели
    model_order = [
        'Hero',
        'About',
        'Movie',
        'MovieBackground',
        'AudioTrack',
        'Testimonial',
        'Partner',
        'TeamMember',
        'ContactRequest',
        'Menu',
        'SiteText',
    ]

    for app in app_list:
        if app['app_label'] == 'idalgo':
            app['models'].sort(key=lambda x: (
                model_order.index(x['object_name'])
                if x['object_name'] in model_order
                else 999
            ))

    return app_list


# Применяем патч
admin.AdminSite.get_app_list = custom_get_app_list


@admin.register(Menu)
class MenuAdmin(TranslationAdmin):
    list_display = ('ordering', 'title', 'is_active')
    list_editable = ('is_active',)
    ordering = ('ordering',)


@admin.register(Hero)
class HeroAdmin(TranslationAdmin):
    list_display = ('title', 'is_active')
    list_filter = ('is_active',)


class AboutSlideInline(TranslationStackedInline):
    model = AboutSlide
    extra = 0


class AboutSkillInline(TranslationStackedInline):
    model = AboutSkill
    extra = 0


@admin.register(About)
class AboutAdmin(TranslationAdmin):
    inlines = [AboutSkillInline, AboutSlideInline]


@admin.register(Movie)
class MovieAdmin(TranslationAdmin):
    list_display = ('title', 'is_active', 'ordering', 'preview')
    list_filter = ('is_active',)
    list_editable = ('is_active',)
    ordering = ('ordering',)

    def preview(self, obj):
        if obj.preview_image:
            return mark_safe(f"<img src='{obj.preview_image.url}' width='50'/>")
        return None
    preview.short_description = 'Preview'


@admin.register(MovieBackground)
class MovieBackgroundAdmin(admin.ModelAdmin):
    list_display = ['ordering', 'image', 'view_image', 'is_active']
    list_filter = ('is_active',)
    ordering = ['ordering']
    list_editable = ['is_active']


    def save_model(self, request, obj, form, change):
        """Сохраняет модель, обеспечивая только один активный фон"""
        if obj.is_active:
            # Если этот фон помечается как активный, деактивируем все остальные
            MovieBackground.objects.exclude(pk=obj.pk).update(is_active=False)
        elif not MovieBackground.objects.filter(is_active=True).exclude(pk=obj.pk).exists():
            # Если нет других активных фонов, этот становится активным
            obj.is_active = True

        super().save_model(request, obj, form, change)

    def get_readonly_fields(self, request, obj=None):
        """Делаем is_active редактируемым, но с логикой"""
        return []

    def view_image(self, obj):
        if obj.image:
            return mark_safe(f"<img src='{obj.image.url}' width='50'/>")
        return None

    view_image.image = 'Photo'


# Audio
@admin.register(AudioTrack)
class AudioTrackAdmin(TranslationAdmin):
    list_display = ('title', 'subtitle', 'formatted_duration', 'is_active', 'ordering')
    list_editable = ('is_active',)
    list_filter = ('is_active',)
    ordering = ('ordering',)

    def formatted_duration(self, obj):
        if not obj.duration:
            return '--:--'
        minutes = obj.duration // 60
        seconds = obj.duration % 60
        return f'{minutes}:{seconds:02d}'

    formatted_duration.short_description = 'Duration'


@admin.register(Testimonial)
class TestimonialAdmin(TranslationAdmin):
    list_display = ('author_name', 'author_company', 'is_active')
    list_filter = ('is_active',)


@admin.register(Partner)
class PartnerAdmin(admin.ModelAdmin):
    list_display = ('name', 'ordering', 'is_active')
    list_filter = ('is_active',)
    ordering = ('ordering',)


@admin.register(TeamMember)
class TeamMemberAdmin(TranslationAdmin):
    list_display = ('name', 'position', 'is_active', 'ordering')
    list_filter = ('is_active',)
    ordering = ('ordering',)


@admin.register(ContactRequest)
class ContactRequestAdmin(admin.ModelAdmin):
    list_display = ('name', 'email', 'created_at')
    readonly_fields = ('name', 'email', 'message', 'created_at')
    ordering = ('-created_at',)

    def has_add_permission(self, request):
        return False


@admin.register(SiteText)
class SiteTextAdmin(TranslationAdmin):
    list_display = ('about_title',)

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