# serializers.py

from rest_framework import serializers
from .models import AddressMaster
from .import fetch_data

# class CustomerMasterSerializer(serializers.ModelSerializer):
#     class Meta:
#         model = CustomerMaster
#         fields = '__all__'  # You can specify specific fields instead of '__all__' if needed


class AddressMasterSerializer(serializers.ModelSerializer):

    address_id = serializers.IntegerField(required=True, write_only=True)
    AddressLine4 = serializers.SerializerMethodField()

    class Meta:
        model = AddressMaster
        exclude = [
            'CreatedBy',
            'CreatedDate',
            'UpdatedBy',
            'UpdatedDate',
            'IsDeleted'
        ]
        extra_kwargs = {

            'CustomerName': {'required': False},
            'CustomerMasterId': {'required': False},
            'CustomerNickName': {'required': False, 'allow_null': True, 'allow_blank': False},
            'Type': {'required': False, 'allow_null': True, 'allow_blank': True},
            'AddressLine1': {'required': False},
            'AddressLine2': {'required': False, 'allow_null': True, 'allow_blank': True},
            'AddressLine3': {'required': False},
            'City': {'required': False},
            'State': {'required': False},
            'Country': {'required': False},
            'PostalCode': {'required': False},
            'PreferredDeliveryTime': {'required': False, 'allow_null': True},
            'PreferredDeliveryTimeInterval': {'required': False, 'allow_null': True, 'allow_blank': True},
            'DebtorCode': {'required': False},
            'StateCode': {'required': False},
            'CountryCode': {'required': False},
            'ContactPerson': {'required': False},
            'JobDescription': {'required': False},
            'Phone': {'required': False},
            'Fax': {'required': False},
            'Email': {'required': False},
            'ExactERPAddressId': {'required': False, 'allow_null': True},
            'Addressline4': {'required': False},
        }

    def get_AddressLine4(self, obj):
        """function retuerns required address for packing list"""
        address = f"{obj.CountryCode}- {obj.PostalCode} {obj.City}"
        return address


# class CustomerSerializer(serializers.ModelSerializer):
#     class Meta:
#         model = CustomerMaster
#         fields = ['Id', 'NickName', 'Type', 'CustomerName']


class CustomerNameSerializer(serializers.ModelSerializer):
    class Meta:
        model = AddressMaster
        fields = ['Id', 'CustomerNickName']

class BaseAddressMasterSerializer(serializers.ModelSerializer):

    CustomerRequirements = serializers.SerializerMethodField()

    class Meta:
        model = AddressMaster
        exclude = [
            'CreatedBy',
            'CreatedDate',
            'UpdatedBy',
            'UpdatedDate',
            'IsDeleted',
            'Id'
        ]

    def get_CustomerRequirements(self, obj):
        """function retuerns customer specific requirements """
        ship_to = obj.ExactERPAddressId

        requirements = fetch_data.get_customer_requirement_data(ship_to)
        return requirements



class CustomerMasterSerializer(serializers.ModelSerializer):
    
    class Meta:
        model = AddressMaster
        fields = '__all__'