import { useEffect, useCallback } from 'react'; import { useDeliveryStore } from '../stores/deliveryStore'; import type { Delivery } from '../types'; type WebSocketEvent = | { type: 'delivery.created'; payload: Delivery } | { type: 'delivery.updated'; payload: Delivery } | { type: 'delivery.deleted'; payload: { id: string } }; type EventHandler = (event: WebSocketEvent) => void; class MockWebSocket { private handlers: EventHandler[] = []; private isConnected = false; connect() { this.isConnected = true; console.log('WebSocket connected (mock)'); } disconnect() { this.isConnected = false; console.log('WebSocket disconnected (mock)'); } subscribe(handler: EventHandler) { this.handlers.push(handler); return () => { this.handlers = this.handlers.filter((h) => h !== handler); }; } emit(event: WebSocketEvent) { if (!this.isConnected) return; this.handlers.forEach((handler) => handler(event)); } simulateIncomingEvent(event: WebSocketEvent) { this.emit(event); } } const mockWebSocket = new MockWebSocket(); export const useWebSocket = () => { const { addDelivery, updateDelivery, deleteDelivery } = useDeliveryStore(); useEffect(() => { mockWebSocket.connect(); const unsubscribe = mockWebSocket.subscribe((event) => { switch (event.type) { case 'delivery.created': addDelivery(event.payload); break; case 'delivery.updated': updateDelivery(event.payload.id, event.payload); break; case 'delivery.deleted': deleteDelivery(event.payload.id); break; } }); return () => { unsubscribe(); mockWebSocket.disconnect(); }; }, [addDelivery, updateDelivery, deleteDelivery]); const sendEvent = useCallback((event: WebSocketEvent) => { mockWebSocket.emit(event); }, []); return { sendEvent, isConnected: true }; }; export const simulateIncomingDelivery = (delivery: Delivery) => { mockWebSocket.simulateIncomingEvent({ type: 'delivery.created', payload: delivery, }); };