import { EventEmitter } from 'events';
import { PdfGenerationResult } from '../types.js';
/**
 * Typed event map for PDF lifecycle events
 */
export interface PdfEventMap {
    'generation:started': {
        title: string;
        rowCount: number;
        timestamp: string;
    };
    'generation:complete': {
        result: PdfGenerationResult;
    };
    'chunk:processed': {
        chunkIndex: number;
        totalChunks: number;
        sizeBytes: number;
    };
    's3:upload:complete': {
        url: string;
        key: string;
        requestPayload?: Record<string, any>;
    };
    'email:sent': {
        to: string;
        messageId?: string;
    };
    'file:saved': {
        path: string;
        sizeBytes: number;
    };
    'error': {
        error: Error;
        phase: string;
        stack?: string;
    };
}
/**
 * Typed event emitter for PDF lifecycle events.
 *
 * @example
 * ```typescript
 * const events = new PdfEventEmitter();
 *
 * events.on('generation:started', ({ title, rowCount }) => {
 *   console.log(`Generating PDF: ${title} with ${rowCount} rows`);
 * });
 *
 * events.on('s3:upload:complete', ({ url }) => {
 *   notifyClient(url);
 * });
 *
 * events.on('error', ({ error, phase }) => {
 *   alertOps(`PDF failed at ${phase}: ${error.message}`);
 * });
 *
 * await generatePdf({ title: 'Report', data, columns, events });
 * ```
 */
export declare class PdfEventEmitter extends EventEmitter {
    /**
     * Emit a typed lifecycle event
     */
    emitEvent<K extends keyof PdfEventMap>(event: K, payload: PdfEventMap[K]): boolean;
    /**
     * Listen for a typed lifecycle event
     */
    onEvent<K extends keyof PdfEventMap>(event: K, listener: (payload: PdfEventMap[K]) => void): this;
    /**
     * Listen for a typed lifecycle event (once)
     */
    onceEvent<K extends keyof PdfEventMap>(event: K, listener: (payload: PdfEventMap[K]) => void): this;
}
//# sourceMappingURL=PdfEventEmitter.d.ts.map