from rest_framework import permissions, status
from rest_framework.response import Response
from rest_framework.views import APIView
from uuid import UUID

from apps.business.schemes.services.distribution_metrics_service import DistributionMetricsService


class AdminDistributionMetricsView(APIView):
    permission_classes = [permissions.IsAdminUser]

    def get(self, request):
        opportunity_bundle_id = (
            request.query_params.get("opportunity_bundle_id")
            or request.query_params.get("opportunity_bundle_id")
            or ""
        ).strip() or None
        if opportunity_bundle_id:
            try:
                UUID(str(opportunity_bundle_id))
            except ValueError:
                return Response(
                    {"error": "Invalid opportunity_bundle_id"},
                    status=status.HTTP_400_BAD_REQUEST,
                )
        data = DistributionMetricsService.get_metrics(opportunity_bundle_id=opportunity_bundle_id)
        return Response(data, status=status.HTTP_200_OK)
