from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response

from common.permissions import IsStaffOrReadOnly

from .models import Testimonial
from .serializers import TestimonialSerializer


class TestimonialViewSet(viewsets.ModelViewSet):
    """CRUD for client testimonials. Public sees active ones; staff manage all."""

    serializer_class = TestimonialSerializer
    permission_classes = [IsStaffOrReadOnly]
    filterset_fields = ['rating', 'is_featured', 'project']
    search_fields = ['client_name', 'company', 'quote']
    ordering_fields = ['order', 'created_at', 'rating']

    def get_queryset(self):
        qs = Testimonial.objects.select_related('project').all()
        user = self.request.user
        if not (user and user.is_authenticated and user.is_staff):
            qs = qs.filter(is_active=True)
        return qs

    @action(detail=False, methods=['get'])
    def featured(self, request):
        qs = self.filter_queryset(self.get_queryset()).filter(is_featured=True)
        serializer = self.get_serializer(qs, many=True)
        return Response(serializer.data)
