import { useEffect, useMemo, useRef, useState } from "react";
import { io, Socket } from "socket.io-client";

export const SOCKET_EVENT_CONNECTED = "connected";

const useSocket = (url: string, access_token?: string) => {
  const socketConnectionRef = useRef<Socket | null>(null);
  const socketConnectionTimerRef = useRef<any>(null);
  const [socketConnected, setSocketConnected] = useState(false);

  useEffect(() => {
    if (access_token) {
      const socketOptions = {
        extraHeaders: {
          token: access_token,
          language: "en",
        },
      };
      socketConnectionRef.current = io(url, socketOptions);
      socketConnectionRef.current?.on(SOCKET_EVENT_CONNECTED, () => {
        setSocketConnected(true);
      });
    }

    return () => {
      socketConnectionRef.current?.disconnect();
    };
  }, [access_token]);

  return {
    socket: socketConnectionRef,
    socketConnected,
  };
};

export default useSocket;
