export interface PaginationOptions {
  totalItems: number;
  currentPage: number;
  pageSize: number;
  maxPages?: number;
}

export interface PaginationResult {
  currentPage: number;
  totalPages: number;
  pageSize: number;
  totalItems: number;
  hasNextPage: boolean;
  hasPreviousPage: boolean;
  startIndex: number;
  endIndex: number;
}

export interface InfiniteScrollOptions {
  threshold?: number;
  loading?: boolean;
  hasMore?: boolean;
  onLoadMore: () => void;
}

export interface LoadMoreOptions {
  loading?: boolean;
  hasMore?: boolean;
  buttonText?: string;
  loadingText?: string;
  onLoadMore?: () => void;
}

export type PaginationDisplayMode = 'numbers' | 'infinite-scroll' | 'load-more';

export interface PaginationConfig extends PaginationOptions {
  displayMode?: PaginationDisplayMode;
  infiniteScrollOptions?: InfiniteScrollOptions;
  loadMoreOptions?: LoadMoreOptions;
  onPageChange?: (page: number) => void;
  className?: string;
  ariaLabel?: string;
}