import { TaskEither } from '@eleven-am/fp';
import { TranscodeJob } from './types';
import { ExtendedEventEmitter } from './utils';
interface JobProcessorEvents {
    'job:started': TranscodeJob;
    'job:completed': TranscodeJob;
    'job:failed': {
        job: TranscodeJob;
        error: Error;
    };
    'queue:full': {
        size: number;
        maxSize: number;
    };
    'concurrency:changed': {
        current: number;
        max: number;
    };
}
/**
 * JobProcessor - Manages transcoding job execution with concurrency control
 *
 * This class provides a queue-based system for managing FFmpeg transcoding jobs,
 * ensuring system resources aren't overwhelmed by limiting concurrent executions.
 */
export declare class JobProcessor extends ExtendedEventEmitter<JobProcessorEvents> {
    private maxConcurrentJobs;
    private readonly maxQueueSize;
    private readonly queue;
    private activeJobs;
    private disposed;
    constructor(maxConcurrentJobs?: number, maxQueueSize?: number);
    /**
     * Submit a job for processing
     * @param job The transcode job to process
     * @returns A promise that resolves when the job completes
     */
    submitJob(job: TranscodeJob): TaskEither<void>;
    /**
     * Get current queue status
     */
    getStatus(): {
        queueLength: number;
        activeJobs: number;
        maxConcurrentJobs: number;
        isProcessing: boolean;
    };
    /**
     * Update the maximum number of concurrent jobs
     * @param newMax New maximum concurrent jobs
     */
    setMaxConcurrentJobs(newMax: number): void;
    /**
     * Clear all pending jobs from the queue
     */
    clearQueue(): void;
    /**
     * Dispose of the job processor
     */
    dispose(): void;
    /**
     * Process the next job in the queue if possible
     */
    private processNextJob;
    /**
     * Execute a single job
     */
    private executeJob;
    /**
     * Handle job completion and process next job
     */
    private jobCompleted;
    /**
     * Get system load for dynamic concurrency adjustment
     * @returns System load percentage (0-100)
     */
    private getSystemLoad;
    /**
     * Dynamically adjust concurrency based on system load
     * Call this periodically if you want automatic adjustment
     */
    adjustConcurrencyBasedOnLoad(): void;
}
export {};
//# sourceMappingURL=jobProcessor.d.ts.map