from django.utils.decorators import (decorator_from_middleware_with_args,
                                     method_decorator)
from rest_framework import status
from rest_framework.views import APIView

from utils.myresponse import MyResponse
from wikiazma.middleware import SerializerValidationMiddleware

from .models import Challenge
from .serializers import (ChallengeListRequestSerializer,
                          ChallengeModelSerializer)

serializer_decorator = decorator_from_middleware_with_args(SerializerValidationMiddleware)


class ChallengeList(APIView):
    """
    API view for listing challenges.
    """

    @method_decorator(serializer_decorator(ChallengeListRequestSerializer), name='post')
    def post(self, request):
        """
        Handle POST requests for listing challenges.

        Validates the request data and retrieves a paginated list of challenges.

        Args:
            request: The HTTP request object.

        Returns:
            HTTP response containing the list of challenges.
        """
        skip = request.middleware_serializer_data.get("skip")
        take = request.middleware_serializer_data.get("take")
        challenge_queryset = Challenge.objects.prefetch_related('champion_set').all()[skip: skip + take]
        challenge_data = ChallengeModelSerializer(challenge_queryset, many=True).data
        return MyResponse(
            request,
            {
                "status": "ok",
                "message": "Successful",
                "challenges": challenge_data,
            },
            status=status.HTTP_200_OK,
        )
