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

from apps.calls.serializers import DateRangeSerializer
from apps.calls.services import calculate_transfer_percentages
from apps.calls.utils import get_date_range_from_request
from apps.companies.constants import CompanyType
from apps.calls.models import Call


class TransferPercentageMixin:
    """
    Transfer percentage analytics.
    Inherits filtering & visibility from parent ViewSet.
    """

    @action(detail=False, methods=["get"], url_path="transfer-percentage")
    def transfer_percentage(self, request):
        start_dt, end_dt = get_date_range_from_request(
            request,
            DateRangeSerializer
        )

        qs = self.filter_queryset(self.get_queryset())

        if request.user.active_company.company_type == CompanyType.DEALERSHIP:
            qs = Call.objects.filter(
                dealership=request.user.active_company
            )

        calls_qs = (
            qs
            .filter(
                created_at__gte=start_dt,
                created_at__lte=end_dt
            )
        )

        data = calculate_transfer_percentages(calls_qs)

        return Response(data, status=status.HTTP_200_OK)
