// import { useUserStore } from "@/stores/user";
// import { CLIENT_TYPE } from "@/config/constant";
// const userStore = useUserStore();
// import { EventSourcePolyfill } from "event-source-polyfill";

// let eventSource: EventSourcePolyfill | null = null;
// let reconnectAttempts = 0; // 重连次数

// export default function subscribeWarnMsg(proxy: any, url: string) {
//   if (eventSource) {
//     console.log("sse已经存在:", eventSource);
//     return eventSource;
//   } else {
//     eventSource = new EventSourcePolyfill(
//       import.meta.env.VITE_APP_BASE_API + url,
//       {
//         heartbeatTimeout: 3 * 60 * 1000,
//         headers: {
//           "Client-Type": CLIENT_TYPE,
//           [userStore.tokenInfo?.tokenName ?? "token"]:
//             userStore.tokenInfo?.tokenValue ?? "",
//         },
//         withCredentials: true,
//       }
//     );
//     eventSource.onopen = function (e) {
//       console.log(e, "连接刚打开时触发");
//       reconnectAttempts = 0; // 重置重连次数
//     };
//     eventSource.onmessage = (event) => {
//       console.log("收到消息内容是:", event.data);
//     };
//     eventSource.onerror = (event) => {
//       console.error("SSE 连接出错：", event);
//       if (eventSource) {
//         eventSource.close(); // 关闭连接
//       }

//       eventSource = null;
//       // 自动重连逻辑
//       reconnectAttempts++;
//       const reconnectDelay = Math.min(
//         30000,
//         1000 * Math.pow(2, reconnectAttempts)
//       ); // 计算重连延迟，最大延迟为30秒
//       console.log(`将在 ${reconnectDelay} 毫秒后尝试重连...`);
//       // 等待一定时间后重连
//       setTimeout(() => {
//         if (!eventSource) {
//           console.log("尝试重连 SSE...");
//           subscribeWarnMsg(proxy, url); // 递归调用重连
//         }
//       }, reconnectDelay);
//     };
//     return eventSource;
//   }
// }

import { CLIENT_TYPE } from "@/config/constant";
import { useUserStore } from "@/stores/user";
const userStore = useUserStore();
import { EventSourcePolyfill } from "event-source-polyfill";

export function useSSE(url: string, onMessage: (data: any) => void) {
  const es = new EventSourcePolyfill(url, {
    headers: {
      "Client-Type": CLIENT_TYPE,
      [userStore.tokenInfo?.tokenName ?? "token"]:
        userStore.tokenInfo?.tokenValue ?? "",
    },
  });
  // open	在与事件源的连接打开时触发
  // message	在从事件源接收到数据时触发
  // error	在事件源连接未能打开时触发
  es.onopen = () => {
    console.info("[SSE] 已连接");
  };
  es.onmessage = (event) => {
    try {
      const parsed = JSON.parse(event.data);
      onMessage(parsed);
    } catch {
      onMessage(event.data);
    }
  };

  es.onerror = (err) => {
    switch (es.readyState) {
      // 0：相当于常量EventSource.CONNECTING，表示连接还未建立，或者断线正在重连。
      // 1：相当于常量EventSource.OPEN，表示连接已经建立，可以接受数据。
      // 2：相当于常量EventSource.CLOSED，表示连接已断，且不会重连。
      case 0:
        console.info(
          `[SSE] readyState:【${es.readyState}】 连接还未建立，或者断线正在重连`
        );
        break;

      case 1:
        console.info(
          `[SSE] readyState:【${es.readyState}】 连接已经建立，可以接受数据`
        );
        break;
      case 2:
        console.error(
          `[SSE] readyState:【${es.readyState}】 连接已断，且不会重连`,
          err
        );
        break;
    }
  };

  onUnmounted(() => {
    es.close();
  });

  return es;
}
