from rest_framework import serializers
from .models import *
from loans.serializers import LoanApplicationSerializer

class ClassificationItemsSerializer(serializers.ModelSerializer):
    id = serializers.CharField(read_only=True)
    date_added = serializers.CharField(read_only=True)
    class_item_added_by = serializers.CharField(read_only=True)

    class Meta:
        model = ClassificationItems
        fields = '__all__'


class ClassificationsSerializer(serializers.ModelSerializer):
    id = serializers.CharField(read_only=True)
    date_added = serializers.CharField(read_only=True)
    class_added_by = serializers.CharField(read_only=True)
    item_classification = ClassificationItemsSerializer(many=True,read_only=True)

    class Meta:
        model = Classifications
        fields = '__all__'

class ClassificationItemLoansSerializer(serializers.ModelSerializer):
    id = serializers.CharField(read_only=True)
    date_added = serializers.CharField(read_only=True)
    item_loan_added_by = serializers.CharField(read_only=True)
    loan_details = serializers.SerializerMethodField(read_only=True)
    indicator = serializers.PrimaryKeyRelatedField(
        queryset=Classifications.objects.all(),
        write_only=True,
        required=True
    )
    purpose = serializers.PrimaryKeyRelatedField(
        queryset=ClassificationItems.objects.all(),
        source='classification_item',
        write_only=True,
        required=True
    )

    class Meta:
        model = ClassificationItemLoans
        fields = '__all__'

    def get_loan_details(self, obj):
        return LoanApplicationSerializer(obj.classification_item_loan).data
    
    def get_indicator_name(self, obj):
        if obj.classification_item and obj.classification_item.classification:
            return obj.classification_item.classification.name
        return None

    def get_purpose_name(self, obj):
        if obj.classification_item:
            return obj.classification_item.name
        return None
    def create(self, validated_data):
        # Remove indicator because it's only used for validation / assignment
        indicator = validated_data.pop('indicator', None)

        # Ensure the purpose belongs to the indicator
        purpose = validated_data.get('classification_item')
        if indicator and purpose.classification.id != indicator.id:
            raise serializers.ValidationError(
                "The purpose must belong to the selected indicator."
            )
         # Assign the user creating this item
        validated_data['item_loan_added_by'] = self.context['request'].user

        return super().create(validated_data)
        
    
    
       

