import { FetchOptions, NormalizedEmail, PaginationMetadata, PaginationState, PaginatedResponse } from '../interfaces.js';
import { IAdapter } from '../adapters/IAdapter.js';
/**
 * Pagination helper utility class that provides convenient methods for managing
 * email pagination state and fetching emails across multiple pages.
 */
export declare class PaginationHelper {
    private state;
    private adapter;
    constructor(adapter: IAdapter, initialOptions?: FetchOptions);
    /**
     * Fetch the current page of emails
     */
    fetchCurrentPage(): Promise<PaginatedResponse<NormalizedEmail>>;
    /**
     * Fetch the next page of emails
     */
    fetchNextPage(): Promise<PaginatedResponse<NormalizedEmail> | null>;
    /**
     * Fetch the previous page of emails
     */
    fetchPreviousPage(): Promise<PaginatedResponse<NormalizedEmail> | null>;
    /**
     * Navigate to the next page
     */
    goToNextPage(): Promise<PaginatedResponse<NormalizedEmail>>;
    /**
     * Navigate to the previous page
     */
    goToPreviousPage(): Promise<PaginatedResponse<NormalizedEmail>>;
    /**
     * Reset pagination to the first page
     */
    goToFirstPage(): Promise<PaginatedResponse<NormalizedEmail>>;
    /**
     * Fetch all pages up to a specified limit
     */
    fetchAllPages(maxEmails?: number): Promise<PaginatedResponse<NormalizedEmail>>;
    /**
     * Create an async generator for iterating through all pages
     */
    iterateAllPages(): AsyncGenerator<PaginatedResponse<NormalizedEmail>, void, unknown>;
    /**
     * Update pagination options
     */
    updateOptions(newOptions: Partial<FetchOptions>): void;
    /**
     * Get current pagination state
     */
    getCurrentState(): PaginationState;
    /**
     * Create pagination metadata from adapter response
     */
    private createPaginationMetadata;
}
/**
 * Static utility functions for pagination
 */
export declare class PaginationUtils {
    /**
     * Calculate pagination metadata from basic parameters
     */
    static calculatePaginationMetadata(currentPage: number, pageSize: number, totalCount?: number, hasNextPage?: boolean, hasPreviousPage?: boolean): PaginationMetadata;
    /**
     * Create a simple paginated response wrapper
     */
    static createPaginatedResponse<T>(data: T[], pagination: PaginationMetadata, query?: string): PaginatedResponse<T>;
    /**
     * Extract page number from page token (if it's numeric)
     */
    static extractPageFromToken(token: string): number | null;
}
/**
 * Convenient factory function to create a pagination helper
 */
export declare function createPaginationHelper(adapter: IAdapter, options?: FetchOptions): PaginationHelper;
