import { SIPClient } from '@/lib/sip-client'; import type { SIPConfig, ConnectionStatus, CallState } from '@/types/sip'; // Singleton SIP client — survives React StrictMode remounts let sipClient: SIPClient | null = null; let connected = false; type StateUpdater = { setConnectionStatus: (status: ConnectionStatus) => void; setCallState: (state: CallState) => void; setCallerNumber: (number: string | null) => void; }; let stateUpdater: StateUpdater | null = null; export function registerSipStateUpdater(updater: StateUpdater) { stateUpdater = updater; } export function connectSip(config: SIPConfig): void { if (connected || sipClient?.isRegistered() || sipClient?.isConnected()) { return; } if (!config.wsServer || !config.uri) { console.warn('SIP config incomplete — wsServer and uri required'); return; } if (sipClient) { sipClient.disconnect(); } connected = true; stateUpdater?.setConnectionStatus('connecting'); sipClient = new SIPClient( config, (status) => stateUpdater?.setConnectionStatus(status), (state, number) => { stateUpdater?.setCallState(state); if (number !== undefined) stateUpdater?.setCallerNumber(number ?? null); }, ); sipClient.connect(); } export function disconnectSip(): void { sipClient?.disconnect(); sipClient = null; connected = false; stateUpdater?.setConnectionStatus('disconnected'); } export function getSipClient(): SIPClient | null { return sipClient; }