# support/views_services.py
from datetime import timedelta
from django.utils import timezone
from django.db.models import Count, Q
from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView
from rest_framework import permissions
from rest_framework.response import Response
from .models import SupportService, Ticket
from .serializers import SupportServiceSerializer
from .permissions import SupportWritePermission  # your existing role-based write guard

def annotate_counts(qs):
    now = timezone.now()
    day  = now - timedelta(days=1)
    week = now - timedelta(days=7)
    return qs.annotate(
        ticket_count_24h=Count("tickets", filter=Q(tickets__created_at__gte=day)),
        ticket_count_7d =Count("tickets", filter=Q(tickets__created_at__gte=week)),
    )

class ServiceListCreateAPI(ListCreateAPIView):
    """
    GET  /api/support/services/?active=true&realtime=true
    POST /api/support/services/   (admin roles only)
    """
    serializer_class = SupportServiceSerializer
    permission_classes = [permissions.IsAuthenticated]

    def get_queryset(self):
        qs = SupportService.objects.all()
        if self.request.query_params.get("active") == "true":
            qs = qs.filter(is_active=True)
        qs = annotate_counts(qs)
        if self.request.query_params.get("realtime") == "true":
            return qs.order_by("-ticket_count_24h","-ticket_count_7d","sort_order","name")
        return qs.order_by("sort_order","name")

    def get_permissions(self):
        if self.request.method == "POST":
            return [permissions.IsAuthenticated(), SupportWritePermission()]
        return super().get_permissions()

class ServiceDetailAPI(RetrieveUpdateDestroyAPIView):
    """
    GET    /api/support/services/<id>/
    PATCH  /api/support/services/<id>/  (admin roles)
    DELETE /api/support/services/<id>/  (admin roles)
    """
    serializer_class = SupportServiceSerializer
    queryset = SupportService.objects.all()
    permission_classes = [permissions.IsAuthenticated]

    def get_permissions(self):
        if self.request.method in ("PATCH","PUT","DELETE"):
            return [permissions.IsAuthenticated(), SupportWritePermission()]
        return super().get_permissions()
