"""DRF ViewSets for MEL tracking."""
from __future__ import annotations

from rest_framework import viewsets

from apps.core.pagination.paginators import StandardResultsPagination
from apps.mel.permissions import CanViewMelData, IsMelOfficer
from apps.mel.tracking.models import (
    Activity,
    ActivityDependency,
    CorrectiveAction,
    OutputDeliverable,
    UpstreamEvent,
)
from apps.mel.tracking.serializers import (
    ActivityDependencySerializer,
    ActivitySerializer,
    CorrectiveActionSerializer,
    OutputDeliverableSerializer,
    UpstreamEventSerializer,
)


class UpstreamEventViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = UpstreamEvent.objects.select_related("subject").all()
    serializer_class = UpstreamEventSerializer
    permission_classes = [IsMelOfficer]
    pagination_class = StandardResultsPagination


class ActivityViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Activity.objects.select_related("logframe_row", "responsible").all()
    serializer_class = ActivitySerializer
    permission_classes = [CanViewMelData]
    pagination_class = StandardResultsPagination


class ActivityDependencyViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = ActivityDependency.objects.all()
    serializer_class = ActivityDependencySerializer
    permission_classes = [CanViewMelData]
    pagination_class = StandardResultsPagination


class OutputDeliverableViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = OutputDeliverable.objects.select_related("logframe_row").all()
    serializer_class = OutputDeliverableSerializer
    permission_classes = [CanViewMelData]
    pagination_class = StandardResultsPagination


class CorrectiveActionViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = CorrectiveAction.objects.select_related("owner", "created_by").all()
    serializer_class = CorrectiveActionSerializer
    permission_classes = [IsMelOfficer]
    pagination_class = StandardResultsPagination
