"""Cursor and offset pagination utilities."""
from __future__ import annotations
from typing import Generic, Optional, TypeVar

from pydantic import BaseModel, Field

T = TypeVar("T")


class CursorParams(BaseModel):
    """Cursor-based pagination parameters."""

    cursor: Optional[str] = None
    limit: int = Field(default=20, ge=1, le=100)


class OffsetParams(BaseModel):
    """Offset-based pagination parameters."""

    offset: int = Field(default=0, ge=0)
    limit: int = Field(default=20, ge=1, le=100)


class PageInfo(BaseModel):
    """Pagination metadata."""

    has_next: bool
    next_cursor: Optional[str] = None
    total: Optional[int] = None


class PaginatedResponse(BaseModel, Generic[T]):
    """Paginated response wrapper."""

    items: list[T]
    page_info: PageInfo
