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

from apps.calls.serializers import DateRangeSerializer, DailyCallSummarySerializer
from apps.calls.services.daily_calls import DailyCallsService
from apps.calls.utils import get_date_range_from_request
from apps.companies.constants import CompanyType
from apps.calls.models import Call


class DailyCallsMixin:
    """
    Analytics: Daily call statistics.
    """

    @action(detail=False, methods=["get"], url_path="daily-calls")
    def daily_calls(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
            )

        summary = DailyCallsService.get_summary(
            qs,
            start_dt,
            end_dt,
            request.user
        )

        serializer = DailyCallSummarySerializer(summary, many=True)
        return Response(
            {"daily_calls": serializer.data},
            status=status.HTTP_200_OK
        )
