from rest_framework import viewsets
from rest_framework.permissions import IsAdminUser
from django.db.models import Q
from .models import OpportunityBundle, OpportunityBundleDistribution, OpportunityBundleLevel, Rank
from .serializers import OpportunityBundleSerializer, OpportunityBundleDistributionSerializer, OpportunityBundleLevelSerializer, RankSerializer

class OpportunityBundleViewSet(viewsets.ModelViewSet):
    queryset = OpportunityBundle.objects.all()
    serializer_class = OpportunityBundleSerializer
    permission_classes = [IsAdminUser]


class OpportunityBundleDistributionViewSet(viewsets.ModelViewSet):
    queryset = OpportunityBundleDistribution.objects.all()
    serializer_class = OpportunityBundleDistributionSerializer
    permission_classes = [IsAdminUser]

    def get_queryset(self):
        qs = super().get_queryset()
        opportunity_bundle_id = self.request.query_params.get('opportunity_bundle_id')
        opportunity_bundle_id = self.request.query_params.get('opportunity_bundle_id')  # legacy param name
        bundle_id = opportunity_bundle_id or opportunity_bundle_id
        if bundle_id:
            qs = qs.filter(opportunity_bundle_id=bundle_id)
        return qs


class OpportunityBundleLevelViewSet(viewsets.ModelViewSet):
    queryset = OpportunityBundleLevel.objects.all()
    serializer_class = OpportunityBundleLevelSerializer
    permission_classes = [IsAdminUser]

    def get_queryset(self):
        qs = super().get_queryset()
        opportunity_bundle_id = self.request.query_params.get('opportunity_bundle_id')
        opportunity_bundle_id = self.request.query_params.get('opportunity_bundle_id')  # legacy param name
        bundle_id = opportunity_bundle_id or opportunity_bundle_id
        if bundle_id:
            qs = qs.filter(opportunity_bundle_id=bundle_id)
        return qs


class RankAdminViewSet(viewsets.ModelViewSet):
    queryset = Rank.objects.all()
    serializer_class = RankSerializer
    permission_classes = [IsAdminUser]

    def get_queryset(self):
        qs = super().get_queryset()
        opportunity_bundle_id = self.request.query_params.get("opportunity_bundle")
        opportunity_bundle_id = self.request.query_params.get("opportunity_bundle")  # legacy param name
        bundle_id = opportunity_bundle_id or opportunity_bundle_id
        if bundle_id:
            # For a bundle context, include global ranks and bundle-specific overrides.
            qs = qs.filter(Q(opportunity_bundle_id=bundle_id) | Q(opportunity_bundle__isnull=True))
        return qs.order_by("level_number", "opportunity_bundle_id")
