"""
Localization Serializers.
"""
from rest_framework import serializers

from .models import (
    CalendarSystem,
    City,
    Country,
    Currency,
    Language,
    Province,
    Timezone,
    UserLocalePreference,
)


class CountrySerializer(serializers.ModelSerializer):
    class Meta:
        model = Country
        fields = [
            'id', 'name', 'name_en', 'iso2', 'iso3',
            'phone_code', 'flag_emoji', 'is_active', 'sort_order',
        ]


class CountryListSerializer(serializers.ModelSerializer):
    """نسخه سبک برای dropdown و لیست."""
    class Meta:
        model = Country
        fields = ['id', 'name', 'name_en', 'iso2', 'phone_code', 'flag_emoji']


class ProvinceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Province
        fields = ['id', 'country', 'name', 'name_en', 'code']


class ProvinceListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Province
        fields = ['id', 'name', 'name_en', 'code']


class CitySerializer(serializers.ModelSerializer):
    class Meta:
        model = City
        fields = ['id', 'province', 'name', 'name_en', 'code']


class CityListSerializer(serializers.ModelSerializer):
    class Meta:
        model = City
        fields = ['id', 'name', 'name_en', 'code']


class LanguageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Language
        fields = [
            'id', 'name', 'name_en', 'code', 'locale_code',
            'direction', 'number_format', 'font_family', 'is_active',
        ]


class CurrencySerializer(serializers.ModelSerializer):
    class Meta:
        model = Currency
        fields = [
            'id', 'name', 'name_en', 'code', 'symbol',
            'decimal_places', 'thousand_separator', 'decimal_separator',
            'position', 'is_active',
        ]


class TimezoneSerializer(serializers.ModelSerializer):
    class Meta:
        model = Timezone
        fields = ['id', 'name', 'name_en', 'identifier', 'utc_offset', 'country']


class CalendarSystemSerializer(serializers.ModelSerializer):
    class Meta:
        model = CalendarSystem
        fields = ['id', 'name', 'name_en', 'code', 'country', 'is_default']


class UserLocalePreferenceSerializer(serializers.ModelSerializer):
    language_detail = LanguageSerializer(source='language', read_only=True)
    timezone_detail = TimezoneSerializer(source='timezone', read_only=True)
    calendar_detail = CalendarSystemSerializer(source='calendar', read_only=True)
    currency_detail = CurrencySerializer(source='currency', read_only=True)

    class Meta:
        model = UserLocalePreference
        fields = [
            'id', 'language', 'timezone', 'calendar', 'currency',
            'language_detail', 'timezone_detail', 'calendar_detail', 'currency_detail',
        ]

    def create(self, validated_data):
        validated_data['user'] = self.context['request'].user
        return super().create(validated_data)


class ActiveLocaleSerializer(serializers.Serializer):
    """Serializer برای locale فعال (ترکیب user + tenant)."""
    language = LanguageSerializer(allow_null=True)
    timezone = TimezoneSerializer(allow_null=True)
    calendar = CalendarSystemSerializer(allow_null=True)
    currency = CurrencySerializer(allow_null=True)
    country = CountrySerializer(allow_null=True)
