from rest_framework import serializers
from .models import Contribution, ContributionType, PaymentMethod, MpesaTransaction
from members.serializers import MemberListSerializer


class ContributionTypeSerializer(serializers.ModelSerializer):
    class Meta:
        model = ContributionType
        fields = ['id', 'name','keyword']


class PaymentMethodSerializer(serializers.ModelSerializer):
    class Meta:
        model = PaymentMethod
        fields = ['id', 'name']


class ContributionSerializer(serializers.ModelSerializer):
    member_name = serializers.CharField(
        source='member.full_name', read_only=True
    )
    member_id_no = serializers.CharField(
        source='member.member_id', read_only=True
    )
    contribution_type_name = serializers.CharField(
        source='contribution_type.name', read_only=True
    )
    payment_method_name = serializers.CharField(
        source='payment_method.name', read_only=True
    )

    class Meta:
        model = Contribution
        fields = [
            'id', 'member', 'member_name', 'member_id_no',
            'amount', 'contribution_type', 'contribution_type_name',
            'payment_method', 'payment_method_name', 'date',
            'reference_number', 'notes', 'status',
            'mpesa_receipt', 'phone_number', 'created_at',
        ]
        read_only_fields = [
            'id', 'created_at', 'status',
            'mpesa_receipt', 'checkout_request_id'
        ]


class MpesaSTKPushSerializer(serializers.Serializer):
    member_id = serializers.IntegerField()
    phone_number = serializers.CharField(max_length=15)
    amount = serializers.DecimalField(max_digits=12, decimal_places=2)
    contribution_type_id = serializers.IntegerField()