/**
 * Screen Recorder Module
 *
 * Cross-platform screen recording with video capture support.
 * Supports MP4, WebM, GIF output formats.
 *
 * Uses:
 * - macOS: screencapture, AVFoundation via swift
 * - Linux: ffmpeg with x11grab/pipewire
 * - Windows: ffmpeg with gdigrab
 */
import { EventEmitter } from 'events';
export type RecordingFormat = 'mp4' | 'webm' | 'gif' | 'avi' | 'mkv';
export type VideoCodec = 'h264' | 'h265' | 'vp8' | 'vp9' | 'av1';
export type RecordingState = 'idle' | 'recording' | 'paused' | 'processing';
export interface RecordingOptions {
    /** Output file path (without extension) */
    outputPath?: string;
    /** Output format */
    format?: RecordingFormat;
    /** Video codec */
    codec?: VideoCodec;
    /** Frame rate (default: 30) */
    fps?: number;
    /** Video bitrate (e.g., '2M', '5000k') */
    bitrate?: string;
    /** Quality (0-100, for variable bitrate) */
    quality?: number;
    /** Capture audio */
    audio?: boolean;
    /** Audio source (system, microphone, both) */
    audioSource?: 'system' | 'microphone' | 'both';
    /** Maximum duration in seconds */
    maxDuration?: number;
    /** Maximum file size in bytes */
    maxSize?: number;
    /** Capture region (default: full screen) */
    region?: {
        x: number;
        y: number;
        width: number;
        height: number;
    };
    /** Display/screen index for multi-monitor */
    display?: number;
    /** Show mouse cursor */
    showCursor?: boolean;
    /** Highlight mouse clicks */
    highlightClicks?: boolean;
}
export interface RecordingInfo {
    /** Recording ID */
    id: string;
    /** Output file path */
    outputPath: string;
    /** Recording state */
    state: RecordingState;
    /** Start time */
    startTime: Date;
    /** Duration in seconds */
    duration: number;
    /** Current file size in bytes */
    fileSize: number;
    /** Frame count */
    frameCount: number;
    /** Recording options */
    options: RecordingOptions;
}
export interface RecordingResult {
    success: boolean;
    outputPath?: string;
    duration?: number;
    fileSize?: number;
    error?: string;
}
export interface ScreenRecorderConfig {
    /** Default output directory */
    outputDir: string;
    /** Default format */
    defaultFormat: RecordingFormat;
    /** Default FPS */
    defaultFps: number;
    /** Default bitrate */
    defaultBitrate: string;
    /** FFmpeg path (if not in PATH) */
    ffmpegPath?: string;
}
export declare class ScreenRecorder extends EventEmitter {
    private config;
    private currentRecording;
    private ffmpegProcess;
    private recordingStartTime;
    private pausedDuration;
    private pauseStartTime;
    constructor(config?: Partial<ScreenRecorderConfig>);
    /**
     * Start screen recording
     */
    start(options?: RecordingOptions): Promise<RecordingInfo>;
    /**
     * Stop recording
     */
    stop(): Promise<RecordingResult>;
    /**
     * Pause recording
     */
    pause(): Promise<void>;
    /**
     * Resume recording
     */
    resume(): Promise<void>;
    /**
     * Get current recording info
     */
    getStatus(): RecordingInfo | null;
    /**
     * Check if ffmpeg is available
     */
    checkFfmpeg(): Promise<boolean>;
    /**
     * List available display/screen inputs
     */
    listDisplays(): Promise<Array<{
        id: number;
        name: string;
    }>>;
    private startRecording;
    private buildMacOSArgs;
    private buildLinuxArgs;
    private buildWindowsArgs;
    private getCodecName;
    private calculateDuration;
}
export declare function getScreenRecorder(config?: Partial<ScreenRecorderConfig>): ScreenRecorder;
export declare function resetScreenRecorder(): void;
export default ScreenRecorder;
