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

from .models import Challenge, Champion
from quiz.serializers import QuizModelSerializer


class ChallengeListRequestSerializer(serializers.Serializer):
    """
    Serializer for validating the request data for the ChallengeList view.
    """

    skip = serializers.IntegerField(validators=[MinValueValidator(0)])
    take = serializers.IntegerField(
        validators=[MinValueValidator(1), MaxValueValidator(100)]
    )


class ChallengeModelSerializer(serializers.ModelSerializer):
    """
    Serializer for serializing and deserializing Challenge objects.
    """

    quiz = serializers.SerializerMethodField()

    def get_quiz(self, obj):
        return QuizModelSerializer(obj.quiz).data

    champions = serializers.SerializerMethodField()

    def get_champions(self, obj):
        return ChampionModelSerializer(obj.champion_set, many=True).data

    class Meta:
        model = Challenge
        fields = "__all__"


class ChampionModelSerializer(serializers.ModelSerializer):
    """
    Serializer for serializing and deserializing Champion objects.
    """

    class Meta:
        model = Champion
        fields = "__all__"
