from rest_framework import serializers
from .models import  VendorCategory, VendorCategoryServices
from .models import Vendor
from application.models import SelectedProvider


class VendorCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = VendorCategory
        fields = '__all__'


class VendorCategoryServicesSerializer(serializers.ModelSerializer):
    class Meta:
        model = VendorCategoryServices
        fields = '__all__'


class CEODetailSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=255)
    email = serializers.EmailField()


class ContactDetailSerializer(serializers.Serializer):
    email = serializers.EmailField()
    phone = serializers.CharField(max_length=20)
    website = serializers.URLField()
      

class VendorSerializer(serializers.ModelSerializer):
    ceo_detail = CEODetailSerializer(required=False)
    contact_detail = ContactDetailSerializer(required=False)

    class Meta:
        model = Vendor
        fields = [
            'user_id',
            'contact_detail', 'citizenship', 'nid', 
            'company_registration_document', 'pan_vat_document', 
            'pan_number', 'vat_number', 'ceo_detail'
        ]
        extra_kwargs = {
            'ceo_detail': {'required': False},
            'contact_detail': {'required': False},
        }

    def update(self, instance, validated_data):
        ceo_detail = validated_data.pop('ceo_detail', None)
        contact_detail = validated_data.pop('contact_detail', None)
        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        if ceo_detail:
            for key, value in ceo_detail.items():
                instance.ceo_detail[key] = value
            instance.ceo_detail = ceo_detail
        if contact_detail:
            instance.contact_detail = contact_detail
        instance.save()
        return instance


class VendorListingCountSerializer(serializers.Serializer):
    vendor_id = serializers.IntegerField()
    total_applied_listings = serializers.IntegerField()


class SelectedProviderSerializer(serializers.ModelSerializer):
    class Meta:
        model = SelectedProvider
        fields = ['vendor_id', 'application_id']


class VendorDetailSerializer(serializers.ModelSerializer):
    ceo_detail = CEODetailSerializer()
    contact_detail = serializers.JSONField()  
   
    class Meta:
        model = Vendor
        fields = ['contact_detail', 'pan_number', 'vat_number', 'ceo_detail']