export interface IEventBus {
    emit<T extends EventType>(eventType: T, data: EventData<T>, options: {
        source: string;
        correlationId?: string;
    }): boolean;
    on<T extends EventType>(eventType: T, handler: (data: EnhancedEventData<T>) => void | Promise<void>): () => void;
    once<T extends EventType>(eventType: T, handler: (data: EnhancedEventData<T>) => void | Promise<void>): () => void;
    off<T extends EventType>(eventType: T, handler: (data: EnhancedEventData<T>) => void | Promise<void>): void;
    waitFor<T extends EventType>(eventType: T, timeout?: number, condition?: (data: EnhancedEventData<T>) => boolean): Promise<EnhancedEventData<T>>;
    emitBatch<T extends EventType>(events: Array<{
        eventType: T;
        data: EventData<T>;
        options?: {
            source: string;
            correlationId?: string;
        };
    }>): void;
    queryHistory(options?: EventHistoryQuery): EventHistoryEntry[];
    getTotalEvents(): number;
    getEventsByType(): Record<string, number>;
    getRecentEvents(limit?: number): EventHistoryEntry[];
    clearHistory(): void;
    exportHistory(): EventHistoryEntry[];
    getHistoryStats(): {
        totalEvents: number;
        uniqueEventTypes: number;
        oldestEvent?: EventHistoryEntry;
        newestEvent?: EventHistoryEntry;
        averageEventsPerMinute: number;
    };
}
export interface EventHistoryEntry {
    eventType: EventType;
    data: EnhancedEventData<EventType>;
    timestamp: number;
    id: string;
}
export interface EventHistoryQuery {
    eventType?: EventType;
    limit?: number;
    offset?: number;
    fromTimestamp?: number;
    toTimestamp?: number;
    source?: string;
    correlationId?: string;
}
export interface EventMetadata {
    id: string;
    timestamp: number;
    source: string;
    correlationId?: string;
}
export interface AppEvents {
    'app:ready': undefined;
    'game:added': {
        gameId: string;
        name: string;
        dataSource?: string;
        metadata?: Record<string, any>;
    };
    'game:launched': {
        gameId: string;
        launchMode?: string;
        launchConfig?: Record<string, any>;
    };
    'game:stopped': {
        gameId: string;
        duration: number;
        playtime?: number;
    };
    'game:deleted': {
        gameId: string;
        name: string;
    };
    'game:save-created': {
        gameId: string;
        saveId: string;
    };
    'game:save-restored': {
        gameId: string;
        saveId: string;
    };
    'game:save-deleted': {
        gameId: string;
        saveId: string;
    };
    'game:memory-created': {
        gameId: string;
        memoryId: string;
    };
    'game:memory-deleted': {
        gameId: string;
        memoryId: string;
    };
    'game:memory-cover-updated': {
        gameId: string;
        memoryId: string;
    };
    'theme:preset-changed': {
        preset: string;
    };
    'plugin:enabled': {
        pluginId: string;
    };
    'plugin:disabled': {
        pluginId: string;
    };
    'plugin:installed': {
        pluginId: string;
        activate: boolean;
    };
    'plugin:uninstalled': {
        pluginId: string;
        removeData: boolean;
    };
    'scanner:started': {
        scannerId: string;
        scannerPath: string;
        totalScanners?: number;
    };
    'scanner:completed': {
        scannerId: string;
        gamesAdded: number;
        duration: number;
        failedFolders: number;
        totalProcessed: number;
    };
    'scanner:folder-fixed': {
        scannerId: string;
        folderPath: string;
        gameId: string;
    };
    'scanner:folder-ignored': {
        scannerId: string;
        folderPath: string;
    };
    'language:changed': {
        newLanguage: string;
    };
    'plugin:loaded': {
        pluginId: string;
        pluginName: string;
        version: string;
        loadTime: number;
    };
    'plugin:unloaded': {
        pluginId: string;
        pluginName: string;
        reason: 'user' | 'error' | 'update';
    };
    'plugin:error': {
        pluginId: string;
        error: string;
        context: string;
        canRecover: boolean;
    };
    'db:backup-completed': {
        targetPath: string;
    };
    'db:restore-completed': {
        sourcePath: string;
    };
    'tray:config-updated': undefined;
}
export type EventHandler<T extends EventType> = (data: EnhancedEventData<T>) => void | Promise<void>;
export type EventUnsubscribe = () => void;
export interface EventHistoryEntry {
    eventType: EventType;
    data: EnhancedEventData<EventType>;
    timestamp: number;
    id: string;
}
export interface EventHistoryQuery {
    eventType?: EventType;
    limit?: number;
    offset?: number;
    fromTimestamp?: number;
    toTimestamp?: number;
    source?: string;
    correlationId?: string;
}
export type EventType = keyof AppEvents;
export type EventData<T extends EventType> = AppEvents[T];
export type EnhancedEventData<T extends EventType> = AppEvents[T] & EventMetadata;
//# sourceMappingURL=event.d.ts.map