from rest_framework.response import Response

from apps.calls.constants import TRANSFER_STATUS
from utils.paginations import OurLimitOffsetPagination


class CallBDCLimitOffsetPagination(OurLimitOffsetPagination):

    def paginate_queryset(self, queryset, request, view=None):
        self.full_queryset = queryset

        self.scheduled_queryset = queryset.filter(booking_intent=1)
        return super().paginate_queryset(self.full_queryset, request, view)

    def get_paginated_response(self, data):
        total_calls = self.full_queryset.count()
        recieved_calls = self.full_queryset.filter(
            transfer_status=TRANSFER_STATUS.SUCCESSFUL.value
        ).count()
        calls_missed = self.full_queryset.filter(
            transfer_status=TRANSFER_STATUS.FAILED.value
        ).count()
        calls_received = self.full_queryset.filter(
            transfer_status=TRANSFER_STATUS.SUCCESSFUL.value
        ).count()
        scheduled = self.full_queryset.filter(booking_intent=1).count()
        not_scheduled = self.full_queryset.filter(booking_intent=0).count()

        percentage = {'calls_missed': 0, 'scheduled': 0, 'not_scheduled': 0}
        if total_calls > 0:
            percentage['calls_missed'] = round((calls_missed / total_calls) * 100, 2)
            percentage['calls_received'] = round((calls_received / total_calls) * 100, 2)
            percentage['scheduled'] = round((scheduled / total_calls) * 100, 2)
            percentage['not_scheduled'] = round((not_scheduled / total_calls) * 100, 2)

        return Response({
            'count': self.count,
            'next': self.get_next_link(),
            'previous': self.get_previous_link(),
            'total_calls': total_calls,
            'recieved_calls': recieved_calls,
            'calls_missed': calls_missed,
            'scheduled': scheduled,
            'not_scheduled': not_scheduled,
            'percentage': percentage,
            'results': data,
        })
