from drf_spectacular.utils import OpenApiExample, extend_schema
from rest_framework import status, viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

from .models import Service
from .serializers import ServiceSerializer


@extend_schema(
    tags=["Services"],
    examples=[
        OpenApiExample(
            "Create Service",
            value={
                "structure": 12,
                "name": "Breakfast",
                "default_price": "18.00",
                "vat_rate": "10.00",
                "is_active": True,
            },
            request_only=True,
        ),
    ],
)
class ServiceViewSet(viewsets.ModelViewSet):
    serializer_class = ServiceSerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        queryset = Service.objects.filter(structure__user=self.request.user)
        
        # Optional structure_id filter for efficient tenant-scoped queries
        structure_id = self.request.query_params.get("structure_id")
        if structure_id:
            # Filter at DB level for multi-tenant safety and performance
            # Only return active services when structure_id is specified
            queryset = queryset.filter(
                structure_id=structure_id,
                is_active=True
            )
        
        return queryset.order_by("name", "id")

    def destroy(self, request, *args, **kwargs):
        instance = self.get_object()
        try:
            self.perform_destroy(instance)
        except Exception as exc:
            return Response(
                {"detail": str(exc)},
                status=status.HTTP_400_BAD_REQUEST,
            )
        return Response(status=status.HTTP_204_NO_CONTENT)
