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


# 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','profile_pic','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):
    class Meta:
        model = User
        # fields = ['id','first_name','last_name','username','phone_number','country_code','otp','device_id','fcm_token','profile_pic']
        fields = '__all__'

# use social login
class SocialLoginSerializer(serializers.ModelSerializer):
    # profile_picture_url = 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','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)

# 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']
#Get profile api
class GetMagazineProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id','first_name','last_name','username','email','phone_number','country_code','description','profile_pic','address','address_line_2','state','zipcode','city','country_name']

# 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']

# show update profile api
class ShowUpdateProfileSerializer(serializers.ModelSerializer):
    updatepropic = serializers.SerializerMethodField()
    class Meta:
        model = User
        fields = ['id','first_name','last_name','country_code','profile_pic','updatepropic']

    def get_updatepropic(self,obj):
        if obj.profile_pic:
            return obj.profile_pic
        return None


# 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__'