from decimal import Decimal

from rest_framework import serializers

from .models import Payout


class PayoutSerializer(serializers.ModelSerializer):
    user_id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(source='user.name', read_only=True)

    class Meta:
        model = Payout
        fields = [
            'id', 'user_id', 'name', 'amount', 'payout_method', 'provider',
            'account_name', 'account_number', 'status', 'provider_reference',
            'failure_reason', 'paid_at', 'created_at', 'updated_at',
        ]
        read_only_fields = fields


class PayoutRequestSerializer(serializers.Serializer):
    amount = serializers.DecimalField(max_digits=14, decimal_places=2, min_value=Decimal('0.01'))
    payout_method = serializers.ChoiceField(choices=Payout.Method.choices)
    provider = serializers.CharField(max_length=40)
    account_name = serializers.CharField(max_length=120)
    account_number = serializers.CharField(max_length=40, required=False, allow_blank=True, default='')
    # Admins may pay out on behalf of a seller.
    user_id = serializers.IntegerField(required=False)
