export interface PriorityItem<T = any> {
    id: string;
    data: T;
    priority: number;
    timestamp: Date;
    attempts: number;
    maxAttempts: number;
    status: 'pending' | 'processing' | 'completed' | 'failed' | 'retrying';
    error?: string;
    result?: any;
    startedAt?: Date;
    completedAt?: Date;
    duration?: number;
}
export interface PriorityQueueOptions {
    maxSize?: number;
    defaultPriority?: number;
    maxAttempts?: number;
    retryDelay?: number;
    enablePriorityBoost?: boolean;
    priorityBoostThreshold?: number;
    priorityBoostAmount?: number;
}
export interface QueueStats {
    total: number;
    pending: number;
    processing: number;
    completed: number;
    failed: number;
    retrying: number;
    averagePriority: number;
    averageWaitTime: number;
    averageProcessingTime: number;
    oldestItem?: PriorityItem;
    newestItem?: PriorityItem;
}
export declare class PriorityQueue<T = any> {
    private queue;
    private processing;
    private completed;
    private failed;
    private options;
    private itemIdCounter;
    constructor(options?: PriorityQueueOptions);
    enqueue(data: T, priority?: number, id?: string): string;
    dequeue(): PriorityItem<T> | null;
    peek(): PriorityItem<T> | null;
    complete(id: string, result?: any): boolean;
    fail(id: string, error?: string): boolean;
    retry(id: string): boolean;
    remove(id: string): boolean;
    clear(): void;
    getById(id: string): PriorityItem<T> | null;
    updatePriority(id: string, newPriority: number): boolean;
    getStats(): QueueStats;
    getPendingItems(): PriorityItem<T>[];
    getProcessingItems(): PriorityItem<T>[];
    getCompletedItems(): PriorityItem<T>[];
    getFailedItems(): PriorityItem<T>[];
    getRetryingItems(): PriorityItem<T>[];
    isEmpty(): boolean;
    isFull(): boolean;
    size(): number;
    processingSize(): number;
    private findItem;
    private sortQueue;
    private applyPriorityBoost;
    getMaxSize(): number;
    setMaxSize(maxSize: number): void;
    getDefaultPriority(): number;
    setDefaultPriority(priority: number): void;
    getMaxAttempts(): number;
    setMaxAttempts(maxAttempts: number): void;
    enqueueBatch(items: Array<{
        data: T;
        priority?: number;
        id?: string;
    }>): string[];
    dequeueBatch(count: number): PriorityItem<T>[];
}
//# sourceMappingURL=priority-queue.d.ts.map