from django.db.models import F
from drf_spectacular.utils import OpenApiParameter, extend_schema, extend_schema_view
from rest_framework import viewsets

from ..._constants import FILTER_NUMERICAL_LOOKUPS
from ..models import Schedule
from ..serializers import ScheduleSerializer


@extend_schema_view(
    list=extend_schema(
        parameters=[
            OpenApiParameter(
                name="is_valid",
                description="Filter on valid instances",
                required=False,
                type=bool,
            ),
        ]
    )
)
class ScheduleViewSet(viewsets.ModelViewSet):
    queryset = Schedule.objects.all()
    serializer_class = ScheduleSerializer
    filter_fields = {
        "starts": FILTER_NUMERICAL_LOOKUPS,
        "ends": FILTER_NUMERICAL_LOOKUPS,
        "playout_status": FILTER_NUMERICAL_LOOKUPS,
        "broadcasted": FILTER_NUMERICAL_LOOKUPS,
    }
    model_permission_name = "schedule"

    def get_queryset(self):
        filter_valid = self.request.query_params.get("is_valid")
        if filter_valid is None:
            return self.queryset.all()

        filter_valid = filter_valid.strip().lower() in ("true", "yes", "1")
        if filter_valid:
            return self.queryset.filter(starts__lt=F("instance__ends"))

        return self.queryset.filter(starts__gte=F("instance__ends"))