from rest_framework import status
from rest_framework.permissions import IsAdminUser
from rest_framework.response import Response

from apps.station import models as station_model
from apps.station.serializers.station_rejection_serializers import (
    StationRejectionSerializer,
)
from base.views import BaseModelViewSet


class RejectedStationModelAPIView(BaseModelViewSet):
    """
    A viewset for managing rejected stations.

    This viewset allows administrators to list, create, and delete rejected stations.
    """

    permission_classes = (IsAdminUser,)
    serializer_class = StationRejectionSerializer
    queryset = station_model.RejectedStations.objects.all()
    http_method_names = ("get", "post", "delete")

    def create(self, request, *args, **kwargs):
        """
        Create a new rejected station record.

        Args:
            request: The HTTP request object.
            *args: Additional positional arguments.
            **kwargs: Additional keyword arguments.

        Returns:
            Response: JSON response containing serialized rejected station data.
        """
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        station_id = request.data.get("station")

        # Check if the station is already rejected
        if station_model.RejectedStations.objects.filter(
            station=station_id,
        ).exists():
            return Response(
                {"message": "Station already rejected"},
                status=status.HTTP_400_BAD_REQUEST,
            )

        # Save the rejected station record
        serializer.save(user=self.request.user)
        return Response(serializer.data, status=status.HTTP_201_CREATED)
