from rest_framework import serializers
from .models import CreditEnquiry, CreditReport, KYCEnquiry, KYCReport


# Request Serializers
class CreditEnquiryRequestSerializer(serializers.Serializer):
    identifier = serializers.CharField(required=True)
    entity_type = serializers.IntegerField(required=True)
    identification_type = serializers.CharField(required=True)
    reason = serializers.CharField(required=True)
    client_consented = serializers.CharField(required=True)
    sector = serializers.CharField(required=False, allow_blank=True)
    format = serializers.CharField(required=False, allow_blank=True)
    pi_code = serializers.CharField(required=False, allow_blank=True)


class CreditReportRequestSerializer(serializers.Serializer):
    enquiry_id = serializers.CharField(required=True)
    format = serializers.CharField(required=True)
    individual_id = serializers.CharField(required=False, allow_blank=True)
    non_individual_id = serializers.CharField(required=False, allow_blank=True)
    entity_type = serializers.IntegerField(required=True)


class KYCEnquiryRequestSerializer(serializers.Serializer):
    identifier = serializers.CharField(required=True)
    entity_type = serializers.IntegerField(required=True)
    identification_type = serializers.CharField(required=True)
    reason = serializers.CharField(required=True)
    client_consented = serializers.CharField(required=True)
    sector = serializers.CharField(required=False, allow_blank=True)
    format = serializers.CharField(required=False, allow_blank=True)
    pi_code = serializers.CharField(required=False, allow_blank=True)


class KYCReportRequestSerializer(serializers.Serializer):
    enquiry_id = serializers.CharField(required=True)
    format = serializers.CharField(required=True)
    individual_id = serializers.CharField(required=False, allow_blank=True)
    non_individual_id = serializers.CharField(required=False, allow_blank=True)
    entity_type = serializers.IntegerField(required=True)


class CheckProfileRequestSerializer(serializers.Serializer):
    identifier = serializers.CharField(required=True)
    entity_type = serializers.IntegerField(required=True)
    identification_type = serializers.CharField(required=True)
    sector = serializers.CharField(required=True)


# Model Serializers for cached data
class CreditEnquirySerializer(serializers.ModelSerializer):
    class Meta:
        model = CreditEnquiry
        fields = [
            'id', 'organisation', 'identifier', 'entity_type',
            'identification_type', 'reason', 'client_consented',
            'sector', 'format', 'pi_code', 'api_response',
            'created_at', 'updated_at'
        ]
        read_only_fields = ['id', 'created_at', 'updated_at']


class CreditReportSerializer(serializers.ModelSerializer):
    class Meta:
        model = CreditReport
        fields = [
            'id', 'organisation', 'enquiry_id', 'identifier',
            'entity_type', 'format', 'individual_id',
            'non_individual_id', 'api_response', 'created_at', 'updated_at'
        ]
        read_only_fields = ['id', 'created_at', 'updated_at']


class KYCEnquirySerializer(serializers.ModelSerializer):
    class Meta:
        model = KYCEnquiry
        fields = [
            'id', 'organisation', 'identifier', 'entity_type',
            'identification_type', 'reason', 'client_consented',
            'sector', 'format', 'pi_code', 'api_response',
            'created_at', 'updated_at'
        ]
        read_only_fields = ['id', 'created_at', 'updated_at']


class KYCReportSerializer(serializers.ModelSerializer):
    class Meta:
        model = KYCReport
        fields = [
            'id', 'organisation', 'enquiry_id', 'identifier',
            'entity_type', 'format', 'individual_id',
            'non_individual_id', 'api_response', 'created_at', 'updated_at'
        ]
        read_only_fields = ['id', 'created_at', 'updated_at']
