from rest_framework import serializers
from django.core.validators import MinValueValidator, MaxValueValidator

from utils.validators import IncludeExcludeOnlyValidator
from . import conf
from payment.models import Transaction


class PaymentCreateInputSerializer(serializers.Serializer):
    amount = serializers.IntegerField(
        min_value=conf.min_amount_in_payment, max_value=conf.max_amount_in_payment)
    # TODO: restrict this field
    meta = serializers.JSONField(required=False)


class PaymentVerifyInputSerializer(serializers.Serializer):
    Status = serializers.CharField(required=True)
    Authority = serializers.CharField(required=True)


class TransactionGetInputSerializer(serializers.Serializer):
    authority = serializers.CharField(required=True)


class TransactionListInputSerializer(serializers.Serializer):
    success_filter = serializers.CharField(
        validators=[IncludeExcludeOnlyValidator()])
    skip = serializers.IntegerField(validators=[MinValueValidator(0)])
    take = serializers.IntegerField(
        validators=[MinValueValidator(1), MaxValueValidator(100)])


class TransactionModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = Transaction
        fields = ['amount', 'ref_id', 'status',
                  'authority', 'meta', 'created_at']
