import { RealtimeEvent, RealtimeMessage } from './events'; // This is a placeholder that logs events // In production, replace with Pusher, Socket.io, or SSE implementation class EventBroadcaster { private listeners: Map void>> = new Map(); async broadcast(event: RealtimeEvent, data: T, userId?: string): Promise { const message: RealtimeMessage = { event, data, timestamp: new Date().toISOString(), userId, }; console.log('[Realtime] Broadcasting:', event, userId ? `to user ${userId}` : 'global'); // In production, this would push to Pusher/Socket.io // For now, just log // Notify local listeners (for SSE implementation) const channel = userId || 'global'; const channelListeners = this.listeners.get(channel); if (channelListeners) { channelListeners.forEach(listener => listener(message)); } } subscribe(channel: string, callback: (message: RealtimeMessage) => void): () => void { if (!this.listeners.has(channel)) { this.listeners.set(channel, new Set()); } this.listeners.get(channel)!.add(callback); // Return unsubscribe function return () => { this.listeners.get(channel)?.delete(callback); }; } async broadcastToUser(userId: string, event: RealtimeEvent, data: T): Promise { return this.broadcast(event, data, userId); } } export const broadcaster = new EventBroadcaster();