"""
shared/pagination/standard.py
==============================
Paginadores estándar para la API.

Uso en vistas:
    class MiVista(ListAPIView):
        pagination_class = StandardPagination  # 20 por página

Uso en viewsets:
    class MiViewSet(ModelViewSet):
        pagination_class = SmallPagination  # 10 por página (ej: sesiones activas)
"""

from rest_framework.pagination import PageNumberPagination


class StandardPagination(PageNumberPagination):
    """
    Paginación estándar: 20 elementos por página.
    El cliente puede cambiar con ?page_size=N (máx 100).
    """
    page_size            = 20
    page_size_query_param = 'page_size'
    max_page_size        = 100
    page_query_param     = 'page'


class SmallPagination(PageNumberPagination):
    """
    Paginación pequeña: 10 elementos por página.
    Útil para listas que se muestran en sidebars o widgets pequeños.
    """
    page_size            = 10
    page_size_query_param = 'page_size'
    max_page_size        = 50
    page_query_param     = 'page'


class LargePagination(PageNumberPagination):
    """
    Paginación grande: 50 elementos por página.
    Útil para exportaciones o listados completos.
    """
    page_size            = 50
    page_size_query_param = 'page_size'
    max_page_size        = 200
    page_query_param     = 'page'
