from typing import Generic, TypeVar

from pydantic import BaseModel

T = TypeVar("T")


class PaginatedMeta(BaseModel):
    total: int
    page: int
    per_page: int


class ApiResponse(BaseModel, Generic[T]):
    data: T
    meta: PaginatedMeta | None = None
    message: str | None = None


class ApiError(BaseModel):
    code: str
    message: str
    details: dict | None = None
