from rest_framework.response import Response

from utils.paginations import LimitOffsetPagination


class UnreadReadPagination(LimitOffsetPagination):
    default_limit = 10
    limit_query_param = 'limit'
    offset_query_param = 'offset'
    max_limit = 100

    def __init__(self):
        super().__init__()
        self.filtered_qs = None
        self.unfiltered_qs = None

    def paginate_queryset(self, queryset, request, view=None):
        self.filtered_qs = queryset
        self.unfiltered_qs = view.unfiltered_qs
        return super().paginate_queryset(queryset, request, view)

    def get_paginated_response(self, data):
        total_read = self.unfiltered_qs.filter(is_read=True).count()
        total_unread = self.unfiltered_qs.filter(is_read=False).count()

        return Response({
            "count": self.count,
            "total": total_read + total_unread,
            "total_read": total_read,
            "total_unread": total_unread,
            "next": self.get_next_link(),
            "previous": self.get_previous_link(),
            "results": data
        })
