import { useEffect, useCallback } from 'react'; interface NeuralEvent { source: string; data: any; options?: { priority?: 'low' | 'medium' | 'high' | 'critical' }; } type EventHandler = (event: NeuralEvent) => void; class NeuralEventBus { private listeners: Map = new Map(); on(event: string, handler: EventHandler) { if (!this.listeners.has(event)) { this.listeners.set(event, []); } this.listeners.get(event)?.push(handler); } off(event: string, handler: EventHandler) { const handlers = this.listeners.get(event); if (handlers) { this.listeners.set(event, handlers.filter(h => h !== handler)); } } emit(event: string, neuralEvent: NeuralEvent) { const handlers = this.listeners.get(event); if (handlers) { handlers.forEach(h => h(neuralEvent)); } } } export const neuralEventBus = new NeuralEventBus(); export const emitNeuralEvent = ( event: string, source: string, data: any, options?: { priority?: 'low' | 'medium' | 'high' | 'critical' } ) => { neuralEventBus.emit(event, { source, data, options }); }; export const useNeuralEvent = (event: string, handler: (event: NeuralEvent) => void) => { const stableHandler = useCallback(handler, []); useEffect(() => { neuralEventBus.on(event, stableHandler); return () => { neuralEventBus.off(event, stableHandler); }; }, [event, stableHandler]); };