import type { AlarmEvent, RealtimeData } from '../types/platform' type TimeSyncPayload = { time_sync: string } function buildWsUrl(path: string): string { return `ws://localhost:8000${path}` } export function connectRealtime(onMessage: (data: RealtimeData) => void): WebSocket { const socket = new WebSocket(buildWsUrl('/ws/real-time')) socket.onmessage = (event) => { const payload = JSON.parse(event.data) onMessage(payload.data) } return socket } export function connectRealtimeWithLifecycle( onMessage: (data: RealtimeData) => void, handlers: { onOpen?: () => void onClose?: () => void onError?: () => void }, ): WebSocket { const socket = connectRealtime(onMessage) socket.onopen = () => handlers.onOpen?.() socket.onclose = () => handlers.onClose?.() socket.onerror = () => handlers.onError?.() return socket } export function connectAlarm(onMessage: (data: AlarmEvent) => void): WebSocket { const socket = new WebSocket(buildWsUrl('/ws/alarm')) socket.onmessage = (event) => { onMessage(JSON.parse(event.data)) } return socket } export function connectTimeSync(onMessage: (data: { data: TimeSyncPayload }) => void): WebSocket { const socket = new WebSocket(buildWsUrl('/ws/time-sync')) socket.onmessage = (event) => { onMessage(JSON.parse(event.data)) } return socket }