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

from rest_framework import viewsets

from apps.core.pagination.paginators import StandardResultsPagination
from apps.mel.feedback.models import (
    CourseEvaluation,
    FeedbackChannel,
    FeedbackSubmission,
    TracerResponse,
    TracerStudy,
)
from apps.mel.feedback.serializers import (
    CourseEvaluationSerializer,
    FeedbackChannelSerializer,
    FeedbackSubmissionSerializer,
    TracerResponseSerializer,
    TracerStudySerializer,
)
from apps.mel.permissions import CanViewMelData, IsMelOfficer


class FeedbackChannelViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = FeedbackChannel.objects.all()
    serializer_class = FeedbackChannelSerializer
    permission_classes = [IsMelOfficer]
    pagination_class = StandardResultsPagination
    lookup_field = "slug"


class FeedbackSubmissionViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = FeedbackSubmission.objects.select_related("channel", "submitter_user").all()
    serializer_class = FeedbackSubmissionSerializer
    permission_classes = [IsMelOfficer]
    pagination_class = StandardResultsPagination


class TracerStudyViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = TracerStudy.objects.all()
    serializer_class = TracerStudySerializer
    permission_classes = [CanViewMelData]
    pagination_class = StandardResultsPagination
    lookup_field = "slug"


class TracerResponseViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = TracerResponse.objects.select_related("study").all()
    serializer_class = TracerResponseSerializer
    permission_classes = [IsMelOfficer]
    pagination_class = StandardResultsPagination


class CourseEvaluationViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = CourseEvaluation.objects.all()
    serializer_class = CourseEvaluationSerializer
    permission_classes = [CanViewMelData]
    pagination_class = StandardResultsPagination
