from rest_framework import serializers
from ..models import CreditProduct, LoanApplication, Loan, RepaymentSchedule, Repayment
from apps.members.api.serializers import MemberSerializer # For nested member details
from apps.banking.api.serializers import TransactionSerializer # For nested transaction details

class CreditProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = CreditProduct
        fields = '__all__'
        read_only_fields = ['id', 'created_at', 'updated_at']

class LoanApplicationSerializer(serializers.ModelSerializer):
    member_details = MemberSerializer(source='member', read_only=True)
    credit_product_name = serializers.ReadOnlyField(source='credit_product.name')

    class Meta:
        model = LoanApplication
        fields = '__all__'
        read_only_fields = ['id', 'application_date', 'status', 'approved_amount', 'approved_duration_months', 'approval_date', 'approved_by', 'created_at', 'updated_at']

class LoanSerializer(serializers.ModelSerializer):
    member_details = MemberSerializer(source='member', read_only=True)
    credit_product_name = serializers.ReadOnlyField(source='credit_product.name')

    class Meta:
        model = Loan
        fields = '__all__'
        read_only_fields = ['id', 'disbursement_date', 'status', 'created_at', 'updated_at']

class RepaymentScheduleSerializer(serializers.ModelSerializer):
    loan_id = serializers.ReadOnlyField(source='loan.id')

    class Meta:
        model = RepaymentSchedule
        fields = '__all__'
        read_only_fields = ['id', 'created_at', 'updated_at']

class RepaymentSerializer(serializers.ModelSerializer):
    loan_id = serializers.ReadOnlyField(source='loan.id')
    financial_transaction_details = TransactionSerializer(source='financial_transaction', read_only=True)

    class Meta:
        model = Repayment
        fields = '__all__'
        read_only_fields = ['id', 'payment_date', 'created_at', 'updated_at']
