from __future__ import annotations

from django.contrib import admin

from .models import Country, Currency, Language, Locale, Timezone

try:
    from unfold.admin import ModelAdmin
except ImportError:  # pragma: no cover
    ModelAdmin = admin.ModelAdmin  # type: ignore[assignment]


@admin.register(Language)
class LanguageAdmin(ModelAdmin):
    list_display = ("code", "name_english", "name_native", "direction", "numeral_system", "is_enabled", "is_default")
    list_filter = ("direction", "numeral_system", "is_enabled")
    search_fields = ("code", "name_english", "name_native")
    ordering = ("sort_order", "code")


@admin.register(Locale)
class LocaleAdmin(ModelAdmin):
    list_display = ("code", "language", "country", "calendar", "direction", "currency_code", "timezone", "is_default")
    list_filter = ("language", "country", "calendar", "direction")
    search_fields = ("code", "currency_code", "timezone")
    autocomplete_fields = ("language", "country")


@admin.register(Currency)
class CurrencyAdmin(ModelAdmin):
    list_display = ("code", "name", "symbol", "decimals", "is_enabled")
    list_filter = ("is_enabled",)
    search_fields = ("code", "name", "symbol")


@admin.register(Country)
class CountryAdmin(ModelAdmin):
    list_display = (
        "flag_emoji", "iso2", "iso3", "name_english", "name_native", "dial_code",
        "default_currency", "default_calendar", "default_direction",
        "is_enabled", "sort_order",
    )
    list_filter = ("is_enabled", "default_calendar", "default_direction")
    search_fields = ("iso2", "iso3", "name_english", "name_native", "dial_code")
    ordering = ("sort_order", "name_english")
    list_editable = ("is_enabled", "sort_order")
    fieldsets = (
        (None, {
            "fields": (
                "iso2", "iso3", "name_english", "name_native",
                "dial_code", "flag_emoji", "is_enabled", "sort_order",
            ),
        }),
        ("Localization Defaults", {
            "fields": (
                "default_currency", "default_calendar", "default_direction",
                "default_timezone", "first_day_of_week", "weekend_days",
            ),
        }),
    )


@admin.register(Timezone)
class TimezoneAdmin(ModelAdmin):
    list_display = ("name", "display_name", "utc_offset", "is_enabled", "sort_order")
    list_filter = ("is_enabled",)
    search_fields = ("name", "display_name", "utc_offset")
    ordering = ("sort_order", "name")
    list_editable = ("is_enabled", "sort_order")
