from dataclasses import field, fields
from pyexpat import model
from requests import request
# from typing_extensions import Required
from rest_framework import serializers
from .models import *
from magazine import settings

class CheckOtpViewSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id','phone_number']

# user register
class UserRegisterSerializer(serializers.ModelSerializer):
    # email = serializers.EmailField(read_only=True)

    class Meta:
        model = User
        fields = ['id','first_name','last_name','username','email_varification','phone_varification','email','exp_otp_datetime','phone_number','country_code','otp','device_id','fcm_token','country','roles','description','social_login_type','uid']

class RegisterSerializer(serializers.ModelSerializer):
    country_code = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = ['id','first_name','last_name','username','email_varification','phone_varification','email','exp_otp_datetime','phone_number','country_code','otp','device_id','fcm_token','country','roles','description','profile_pic','social_login_type','uid']

    def get_country_code(self,obj):
        if obj.country:
            return obj.country.country_code
        return None

### User OTP Verify Serializer.
class UserOTPVerifiySerializer(serializers.ModelSerializer):
    otp = serializers.CharField(max_length=4, min_length=4)
    username = serializers.CharField(max_length=150)
    class Meta:
        model = User
        fields = ['username', 'otp']

# user login
class UserLoginSerializer(serializers.ModelSerializer):
    country_sort_name = serializers.SerializerMethodField()
    country_name = serializers.SerializerMethodField()
    country_code = serializers.SerializerMethodField()
    
    class Meta:
        model = User
        fields = ['id','first_name','last_name','username','phone_number','otp','device_id','fcm_token','country_sort_name','country_code','address','address_line_2','state','zipcode','city','country_name','profile_pic']
        # fields = '__all__'
    # def get_country_sort_name(self,obj):
        # if obj.country:
        #     return obj.country.sortname
    #     return None
    def get_country_name(self,obj):
        if obj.country_code:
            countryobj = Country.objects.filter(country_code=obj.country_code,id=obj.country.id).last()
            if countryobj:
                return countryobj.name
        elif obj.country:
            return obj.country.name
        else:
            return None

    def get_country_sort_name(self,obj):
        if obj.country_code:
            countryobj = Country.objects.filter(country_code=obj.country_code,id=obj.country.id).last()
            if countryobj:
                return countryobj.sortname
        elif obj.country:
            return obj.country.sortname
        else:
            return None
    def get_country_code(self,obj):
        if obj.country_code:
            countryobj = Country.objects.filter(country_code=obj.country_code).last()
            if countryobj:
                return countryobj.country_code
        elif obj.country:
            return obj.country.country_code
        else:
            return None

# use social login
class SocialLoginSerializer(serializers.ModelSerializer):
    # profile_picture_url = serializers.SerializerMethodField()
    country_name = serializers.SerializerMethodField()
    country_code = serializers.SerializerMethodField()
    country_sort_name = serializers.SerializerMethodField()
    # url = serializers.CharField(source='get_absolute_url', read_only=True)

    class Meta:
        model = User
        fields = ['id','first_name','last_name','username','phone_number','country_code','country_sort_name','country_name','otp','device_id','fcm_token','profile_pic','social_login_type','uid']

    # def get_profile_picture_url(self, obj):
        
    #     # request = self.context['request']
    #     request=obj.profile_pic
    #     return request.build_absolute_uri(settings.MEDIA_URL + obj.profile_pic)

    def get_country_name(self,obj):
        if obj.country_code:
            countryobj = Country.objects.filter(country_code=obj.country_code,id=obj.country.id).last()
            if countryobj:
                return countryobj.name
        elif obj.country:
            return obj.country.name
        else:
            return None
    def get_country_sort_name(self,obj):
        if obj.country_code:
            countryobj = Country.objects.filter(country_code=obj.country_code,id=obj.country.id).last()
            if countryobj:
                return countryobj.sortname
        elif obj.country:
            return obj.country.sortname
        else:
            return None
    def get_country_code(self,obj):
        if obj.country_code:
            countryobj = Country.objects.filter(country_code=obj.country_code).last()
            if countryobj:
                return countryobj.country_code
        elif obj.country:
            return obj.country.country_code
        else:
            return None

# use social Register
class SocialRegisterSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ['id','first_name','last_name','username','phone_number','country_code','country','otp','device_id','fcm_token','profile_pic','social_login_type','uid']


# user country code 
class CountrySerializer(serializers.ModelSerializer):
    class Meta:
        model = Country
        fields = '__all__'

# user Subscribtion 
class SubscriptionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Subscription
        fields = '__all__'
        # fields = ['id','first_name','last_name','username','email','phone_number','country_code','otp','device_token','fcm_token','profile_pic']

class SubsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Subscription
        # fields = '__all__'
        fields = ['id','subscription_type','start_date','end_date','subscription_status','created_on','updated_on']

#magazine profile api
class MagazineProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id','first_name','last_name','username','email','email_varification','phone_varification','phone_number','otp','otp_varification','country_code','roles','description','profile_pic']

import time
#Get profile api
class GetMagazineProfileSerializer(serializers.ModelSerializer):
    sort_name = serializers.SerializerMethodField()
    profile_pic = serializers.SerializerMethodField()
    country_name =serializers.SerializerMethodField()
    # current_country_code = serializers.SerializerMethodField()
    class Meta:
        model = User
        fields = ['id','first_name','last_name','username','email','phone_number','country_code','sort_name','description','profile_pic','address','address_line_2','state','zipcode','city','country_name']
    
    def get_sort_name(self, obj):
        print(obj.id,"AAAAAAAAAA")
        # cc = Country.objects.filter(id=obj.country.id,country_code=obj.country_code).last()
        if obj.country:
            if obj.country.sortname:
                sort_name = obj.country.sortname
                return obj.country.sortname
            else:

                return ""
        else:
            return ""
    def get_country_name(self, obj):
        if obj.country:
            if obj.country.name:
                return obj.country.name
            else:
                return ""
        else:
            return ""
    # def get_current_country_code(self, obj):
    #     if obj.country:
    #         if obj.country.country_code:
    #             return obj.country.country_code
    #         else:
    #             return ""
    #     else:
    #         return ""
        

    def get_profile_pic(self, obj):
        if obj.profile_pic:
            print(obj.profile_pic.url,'====obj.profile_pic')
            return f"{obj.profile_pic.url}?{time.time()}"
            # return f"{obj.profile_pic.url}"



# Update profile api
class UpdateProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        # fields = '__all__'
        fields = ['id','first_name','last_name','country_code','description','profile_pic','address','address_line_2','state','zipcode','city','country_name','email','phone_number','country']

# show update profile api
class ShowUpdateProfileSerializer(serializers.ModelSerializer):
    country_name = serializers.SerializerMethodField()
    country_sort_name = serializers.SerializerMethodField()
    class Meta:
        model = User
        fields = ['id','first_name','last_name','country_code','country_sort_name','description','profile_pic','address','address_line_2','state','zipcode','city','country_name','email','phone_number']

    def get_country_name(self,obj):
        if obj.country:
            if obj.country.name:
                return obj.country.name
            else:
                return ""
        else:
            return ""

    def get_country_sort_name(self,obj):
        if obj.country:
            if obj.country.sortname:
                print(obj.country.sortname,'======3333')
                return obj.country.sortname
            else:
                return ""
        else:
            return ""

# Master Currency Serializer
class MasterCurrencySerializer(serializers.ModelSerializer):
    class Meta:
        model = MasterCurrency
        fields = ['id','country_code','currency','currency_status','created_on','updated_on']

#contacts serialiser 
class ContactsSerializer(serializers.ModelSerializer):
    class Meta:
        model = ContactsUs
        # fields = ['id','description']
        fields = '__all__'


# User notification serialiser 
class NotificationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Notification
        # fields = ['id','description']
        fields = '__all__'

# count list notification serialiser 
class ListNotificationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Notification
        fields = ['id','message','created_on','updated_on','read']
        # fields = '__all__'

# class ListNotificationSerializer(serializers.ModelSerializer):
#     date = serializers.SerializerMethodField()
#     class Meta:
#         model = Notification
#         fields = ['date']
        

#     def get_date(self, obj):
#         data = {f"{obj.updated_on}":""}

