import type { ChatServerEvent } from "@/types/chatbot";

export type ChatSocketHandlers = {
  onTextMessage?: (text: string) => void;
  onJsonMessage?: (data: ChatServerEvent) => void;
  onOpen?: () => void;
  onError?: (err: Event) => void;
  onClose?: () => void;
};

export function createChatSocket(
  url: string,
  handlers: ChatSocketHandlers
): WebSocket {
  const ws = new WebSocket(url);

  ws.onopen = () => {
    handlers.onOpen?.();
  };

  ws.onmessage = (event: MessageEvent) => {
    const raw = event.data;
    try {
      const json = JSON.parse(raw);
      handlers.onJsonMessage?.(json);
      handlers.onTextMessage?.(raw);
      return;
    } catch {
      handlers.onTextMessage?.(raw);
    }
  };

  ws.onerror = (err) => {
    handlers.onError?.(err);
  };

  ws.onclose = () => {
    handlers.onClose?.();
  };

  return ws;
}