"""
This file contains the viewsets (based on the elsewhere defined data models and serializers)
"""

from django.shortcuts import get_object_or_404
from rest_framework import viewsets
from .. import models
from .. import serializers

class SubtaskConnectorViewSet(viewsets.ModelViewSet):
    queryset = models.SubtaskConnector.objects.all()
    serializer_class = serializers.SubtaskConnectorSerializer


class SubtaskStateChoiceViewSet(viewsets.ModelViewSet):
    queryset = models.SubtaskStateChoice.objects.all()
    serializer_class = serializers.SubtaskStateChoiceSerializer


class SubtaskTypeChoiceViewSet(viewsets.ModelViewSet):
    queryset = models.SubtaskTypeChoice.objects.all()
    serializer_class = serializers.SubtaskTypeChoiceSerializer


class StationTypeChoiceViewSet(viewsets.ModelViewSet):
    queryset = models.StationTypeChoice.objects.all()
    serializer_class = serializers.StationTypeChoiceSerializer


class AlgorithmViewSet(viewsets.ModelViewSet):
    queryset = models.Algorithm.objects.all()
    serializer_class = serializers.AlgorithmSerializer


class ScheduleMethodViewSet(viewsets.ModelViewSet):
    queryset = models.ScheduleMethod.objects.all()
    serializer_class = serializers.ScheduleMethodSerializer


class SubtaskTemplateViewSet(viewsets.ModelViewSet):
    queryset = models.SubtaskTemplate.objects.all()
    serializer_class = serializers.SubtaskTemplateSerializer


class DefaultSubtaskTemplateViewSet(viewsets.ModelViewSet):
    queryset = models.DefaultSubtaskTemplate.objects.all()
    serializer_class = serializers.DefaultSubtaskTemplateSerializer


class DataproductSpecificationsTemplateViewSet(viewsets.ModelViewSet):
    queryset = models.DataproductSpecificationsTemplate.objects.all()
    serializer_class = serializers.DataproductSpecificationsTemplateSerializer


class DefaultDataproductSpecificationsTemplateViewSet(viewsets.ModelViewSet):
    queryset = models.DefaultDataproductSpecificationsTemplate.objects.all()
    serializer_class = serializers.DefaultDataproductSpecificationsTemplateSerializer


class SubtaskInputSelectionTemplateViewSet(viewsets.ModelViewSet):
    queryset = models.SubtaskInputSelectionTemplate.objects.all()
    serializer_class = serializers.SubtaskInputSelectionTemplateSerializer


class DataproductFeedbackTemplateViewSet(viewsets.ModelViewSet):
    queryset = models.DataproductFeedbackTemplate.objects.all()
    serializer_class = serializers.DataproductFeedbackTemplateSerializer


class SubtaskViewSet(viewsets.ModelViewSet):
    queryset = models.Subtask.objects.all()
    serializer_class = serializers.SubtaskSerializer

    def get_queryset(self):
        if 'task_blueprint_pk' in self.kwargs:
            task_blueprint = get_object_or_404(models.TaskBlueprint, pk=self.kwargs['task_blueprint_pk'])
            return task_blueprint.subtasks.all()
        else:
            return models.Subtask.objects.all()


class SubtaskInputViewSet(viewsets.ModelViewSet):
    queryset = models.SubtaskInput.objects.all()
    serializer_class = serializers.SubtaskInputSerializer


class SubtaskOutputViewSet(viewsets.ModelViewSet):
    queryset = models.SubtaskOutput.objects.all()
    serializer_class = serializers.SubtaskOutputSerializer


class DataproductViewSet(viewsets.ModelViewSet):
    queryset = models.Dataproduct.objects.all()
    serializer_class = serializers.DataproductSerializer


class AntennaSetViewSet(viewsets.ModelViewSet):
    queryset = models.AntennaSet.objects.all()
    serializer_class = serializers.AntennaSetSerializer


class DataproductTransformViewSet(viewsets.ModelViewSet):
    queryset = models.DataproductTransform.objects.all()
    serializer_class = serializers.DataproductTransformSerializer


class FilesystemViewSet(viewsets.ModelViewSet):
    queryset = models.Filesystem.objects.all()
    serializer_class = serializers.FilesystemSerializer


class ClusterViewSet(viewsets.ModelViewSet):
    queryset = models.Cluster.objects.all()
    serializer_class = serializers.ClusterSerializer


class DataproductArchiveInfoViewSet(viewsets.ModelViewSet):
    queryset = models.DataproductArchiveInfo.objects.all()
    serializer_class = serializers.DataproductArchiveInfoSerializer


class DataproductHashViewSet(viewsets.ModelViewSet):
    queryset = models.DataproductHash.objects.all()
    serializer_class = serializers.DataproductHashSerializer