/**
 * Priority Queue Manager
 * BullMQ priority levels with datacenter affinity
 * Sealed namespace for immutability
 */
import { type RedisConfig } from '../../../src/index.js';
import type { Queue } from 'bullmq';
export type PriorityLevel = 'critical' | 'high' | 'normal' | 'low';
export type JobPriority = {
    level: PriorityLevel;
    value: number;
};
export type DatacenterAffinity = {
    preferred: string[];
    fallback: string[];
};
export type PriorityJobOptions = {
    priority: PriorityLevel;
    datacenter?: DatacenterAffinity;
    delay?: number;
    attempts?: number;
    backoff?: {
        type: 'exponential' | 'fixed';
        delay: number;
    };
    removeOnComplete?: boolean | number;
    removeOnFail?: boolean | number;
};
export type QueueInfo = {
    name: string;
    isPaused: boolean;
    jobCounts: {
        active: number;
        waiting: number;
        completed: number;
        failed: number;
        delayed: number;
        paused: number;
    };
};
/**
 * Priority Queue Manager - Sealed namespace
 */
export declare const PriorityQueue: Readonly<{
    /**
     * Initialize with Redis configuration
     */
    initialize(_config: RedisConfig): void;
    /**
     * Add a job to the queue with priority
     */
    addJob<T = unknown>(queueName: string, jobName: string, data: T, options: PriorityJobOptions): Promise<string>;
    /**
     * Add multiple jobs in bulk
     */
    addBulk<T = unknown>(queueName: string, jobs: Array<{
        name: string;
        data: T;
        options: PriorityJobOptions;
    }>): Promise<string[]>;
    /**
     * Get job by ID
     */
    getJob(queueName: string, jobId: string): Promise<import("bullmq").Job<any, any, string> | undefined>;
    /**
     * Remove a job
     */
    removeJob(queueName: string, jobId: string): Promise<void>;
    /**
     * Pause a queue
     */
    pause(queueName: string): Promise<void>;
    /**
     * Resume a queue
     */
    resume(queueName: string): Promise<void>;
    /**
     * Get queue information
     */
    getQueueInfo(queueName: string): Promise<QueueInfo>;
    /**
     * Get all queue names
     */
    getQueueNames(): Promise<string[]>;
    /**
     * Drain queue (remove all jobs)
     */
    drain(queueName: string, delayed?: boolean): Promise<void>;
    /**
     * Clean old jobs from queue
     */
    clean(queueName: string, grace: number, limit: number, type?: "completed" | "failed" | "delayed" | "wait" | "active" | "paused"): Promise<string[]>;
    /**
     * Obliterate queue (remove all data including queue itself)
     */
    obliterate(queueName: string, force?: boolean): Promise<void>;
    /**
     * Get priority value for level
     */
    getPriorityValue(level: PriorityLevel): number;
    /**
     * Check if job matches datacenter affinity
     */
    matchesDatacenter(jobDatacenter: DatacenterAffinity | undefined, workerRegion: string): boolean;
    /**
     * Get queue instance (internal use)
     */
    getQueueInstance(queueName: string): Promise<Queue>;
    /**
     * Close a queue
     */
    closeQueue(queueName: string): Promise<void>;
    /**
     * Shutdown and close all queues
     */
    shutdown(): Promise<void>;
}>;
//# sourceMappingURL=PriorityQueue.d.ts.map