/**
 * Analysis Orchestrator for AuditMySite
 *
 * Coordinates multiple analyzers in a clean, typed way with proper
 * error handling and resource management.
 */
import { Page } from 'playwright';
import { IAnalysisOrchestrator, AnalyzerType, BaseAnalysisOptions, BaseAnalysisResult, ILogger, IAnalyzerFactory } from '../analyzers/interfaces';
export interface OrchestratorConfig {
    readonly analyzerFactory: IAnalyzerFactory;
    readonly logger: ILogger;
    readonly defaultTimeout: number;
    readonly failFast: boolean;
}
export interface AnalysisOptions extends BaseAnalysisOptions {
    readonly analyzerTypes?: AnalyzerType[];
    readonly failFast?: boolean;
    readonly concurrency?: boolean;
}
export interface AnalysisResults {
    readonly url: string;
    readonly timestamp: Date;
    readonly totalDuration: number;
    readonly results: BaseAnalysisResult[];
    readonly errors: AnalysisError[];
    readonly successful: BaseAnalysisResult[];
    readonly failed: BaseAnalysisResult[];
}
export interface AnalysisError {
    readonly analyzerType: AnalyzerType;
    readonly error: string;
    readonly duration: number;
}
/**
 * Orchestrates analysis across multiple analyzers with proper resource management
 */
export declare class AnalysisOrchestrator implements IAnalysisOrchestrator {
    private readonly config;
    constructor(config: OrchestratorConfig);
    /**
     * Run analysis for a specific page
     */
    runAnalysis(page: Page, url: string, analyzerTypes: AnalyzerType[], options?: AnalysisOptions): Promise<BaseAnalysisResult[]>;
    /**
     * Get available analyzers from the factory
     */
    getAvailableAnalyzers(): AnalyzerType[];
    /**
     * Run a comprehensive analysis with all available analyzers
     */
    runComprehensiveAnalysis(page: Page, url: string, options?: AnalysisOptions): Promise<AnalysisResults>;
    /**
     * Validate that all required analyzers are available
     */
    validateAnalyzers(analyzerTypes: AnalyzerType[]): void;
    private runSingleAnalysis;
    private createTimeoutPromise;
}
/**
 * Error classes for analysis orchestration
 */
export declare class AnalysisOrchestrationError extends Error {
    constructor(url: string, message: string);
}
export declare class AnalyzerValidationError extends Error {
    constructor(unavailableAnalyzers: AnalyzerType[]);
}
//# sourceMappingURL=analysis-orchestrator.d.ts.map