from rest_framework.response import Response

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


class CallLimitOffsetPagination(OurLimitOffsetPagination):
    def get_paginated_response(self, data):
        view = self.request.parser_context['view']
        queryset = view.filter_queryset((view.get_queryset()))

        total = queryset.count() or 1
        success_count = queryset.filter(transfer_status=TRANSFER_STATUS.SUCCESSFUL.value).count()
        not_transfer_count = queryset.filter(transfer_status=TRANSFER_STATUS.NOT_TRANSFERRED.value).count()
        failed_count = queryset.filter(transfer_status=TRANSFER_STATUS.FAILED.value).count()
        offtime_count = queryset.filter(transfer_status=TRANSFER_STATUS.OFF_TTIME.value).count()

        return Response({
            'count': queryset.count(),
            'next': self.get_next_link(),
            'previous': self.get_previous_link(),
            'transfer_success_count': success_count,
            'not_transfer_count': not_transfer_count,
            'transfer_failed': failed_count,
            'offtime_count': offtime_count,
            
            'transfer_success_percentage':  round((success_count / total) * 100, 2) ,
            'not_transfer_percentage': round((not_transfer_count / total) * 100, 2) ,
            'transfer_failed_percentage': round((failed_count / total) * 100, 2) ,
            'offtime_percentage': round((offtime_count / total) * 100, 2),

            'results': data,
        })
