"""Shared pagination classes.

`CreatedCursorPagination` is the canonical choice for infinite-scroll feeds
(posts feed, chat message history). Cursor pagination keeps a stable view of
results even when new items are created at the head, which page/offset
pagination does not.
"""

from rest_framework.pagination import CursorPagination


class CreatedCursorPagination(CursorPagination):
    """Cursor pagination ordered by `-created_at` (newest first)."""
    page_size = 20
    ordering = '-created_at'
    cursor_query_param = 'cursor'
    page_size_query_param = 'page_size'
    max_page_size = 100


class TopPostsCursorPagination(CursorPagination):
    """Cursor pagination ordered by vote score descending, then by id descending as tiebreaker."""
    page_size = 20
    ordering = ('-vote_score', '-id')
    cursor_query_param = 'cursor'
    page_size_query_param = 'page_size'
    max_page_size = 100


class CreatedAscCursorPagination(CursorPagination):
    """Cursor pagination ordered by `created_at` (oldest first).

    Used for chat history scroll-back where messages are displayed oldest -> newest
    and pagination walks backwards in time from the most recent.
    """
    page_size = 30
    ordering = '-created_at'  # backend orders newest-first; client reverses for display
    cursor_query_param = 'cursor'
    page_size_query_param = 'page_size'
    max_page_size = 100
