from .serializers import ReportsSerializer
from .models import Reports
from rest_framework.views import APIView
from rest_framework import status, viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.filters import SearchFilter
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.permissions import IsAdminUser
from .services import ProductInquiriesReport


# Create your views here.
class ReportsViewset(viewsets.ModelViewSet):
    queryset = Reports.objects.order_by("-created_at")
    serializer_class = ReportsSerializer
    permission_classes = [IsAdminUser]
    http_method_names = ["get"]
    filter_backends = [DjangoFilterBackend, SearchFilter]
    filterset_fields = ["type"]
    search_fields = ["title", "description"]


class ProductInquiriesReportAPIView(APIView):
    permission_classes = [IsAdminUser]

    def get(self, request):
        p_report = ProductInquiriesReport()
        top_ten_data = p_report.get_top_ten_inquired_products(serialize_data=True)
        most_inquired = p_report.get_most_inquired_product(serialize_data=True)
        top_inquirer = p_report.get_top_inquirer()
        most_inquired_category = p_report.get_category_with_most_inquiries()

        response = {
            "top_inquirer": top_inquirer,
            "most_inquired_product": most_inquired,
            "most_inquired_categories": most_inquired_category,
            "top_ten_inquired_products": top_ten_data,
        }

        return Response(response, status=status.HTTP_200_OK)
