import { EventEmitter } from 'events';
import { TaskEither } from '@eleven-am/fp';
import { SegmentProcessingData, SegmentProcessingResult } from './distributed';
export interface PipelineMetrics {
    activeSegments: number;
    completedSegments: number;
    failedSegments: number;
    averageProcessingTime: number;
    pipelineDepth: number;
}
/**
 * Pipelined segment processor that allows overlapping segment processing
 * for improved throughput and reduced latency
 */
export declare class SegmentPipelineProcessor extends EventEmitter {
    private readonly pipeline;
    private readonly processingTimes;
    private completedCount;
    private failedCount;
    private readonly maxPipelineDepth;
    private readonly maxProcessingTimes;
    constructor(maxPipelineDepth?: number);
    /**
     * Process a segment with pipeline management
     */
    processSegment(segmentNumber: number, processor: (data: SegmentProcessingData) => Promise<SegmentProcessingResult>, data: SegmentProcessingData): Promise<TaskEither<SegmentProcessingResult>>;
    /**
     * Process multiple segments in batches with pipeline optimization
     */
    processBatch(segments: Array<{
        number: number;
        data: SegmentProcessingData;
    }>, processor: (data: SegmentProcessingData) => Promise<SegmentProcessingResult>): Promise<TaskEither<SegmentProcessingResult[]>>;
    /**
     * Wait for all segments in pipeline to complete
     */
    waitForPipeline(): Promise<void>;
    /**
     * Get current pipeline metrics
     */
    getMetrics(): PipelineMetrics;
    /**
     * Dynamically adjust pipeline depth based on performance
     */
    adjustPipelineDepth(cpuUsage: number, memoryUsage: number): void;
    /**
     * Clear the pipeline and reset metrics
     */
    clear(): void;
    private waitForPipelineSpace;
    private handleSegmentSuccess;
    private handleSegmentFailure;
    private cleanupSegment;
    private recordProcessingTime;
    private calculateAverageProcessingTime;
}
//# sourceMappingURL=segmentPipelineProcessor.d.ts.map