import { useCallback, useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import {
  createEchoInstance,
  fetchChatHistory,
} from "@/components/common/common";
import {
  chatWindowPopup,
  replaceChat,
  setActiveUser,
  setRoomId,
  setUsersList,
} from "@/hooks/ChatReducer";

const useInitiateChatAndOpenWindow = () => {
  const dispatch = useDispatch();
  const { usersList } = useSelector((state: any) => state?.chatData);

  const initiateChat = useCallback(
    async (userIdToFetchFetchHistory = "", currentLoggedUserId = "") => {
      const quotationUrl = `https://www.powercozmo.com/productdetail/`;
      createEchoInstance();

      try {
        const responseData = await fetchChatHistory({
          userId: userIdToFetchFetchHistory,
          params: "search=&type=all",
          url: "",
        });

        const { message = "" } = responseData?.data || {};
        const { user_status } = responseData || {};
        const userIndex = user_status.findIndex(
          (user) => user.user_id !== currentLoggedUserId
        );

        if (userIndex !== -1) {
          const { online, company, user_id, room_id, name, avatar_original } =
            user_status[userIndex];
          const {
            all: { data, nextPageUrl },
          } = message;

          dispatch(replaceChat(data));
          dispatch(setRoomId(room_id));

          const initialActiveUser = {
            room_id,
            name,
            id: user_id,
            online,
            companyName: company,
            previousChatUrl: nextPageUrl,
            quotationUrl: !data?.length
              ? quotationUrl
                ? quotationUrl
                : null
              : null,
            avatar_original,
          };

          const isUserAlreadyExist = usersList.find(
            (user) => +user.id === user_id
          );
          if (!isUserAlreadyExist) {
            const newUserDetails = {
              ...user_status[userIndex],
              is_group: null,
              shop_name: company,
              id: user_id,
              is_blocked: 0,
              is_pinned: 0,
            };
            const newUserLists = [...usersList, newUserDetails];
            dispatch(setUsersList(newUserLists));
          }
          dispatch(setActiveUser(initialActiveUser));
        }
      } catch (error) {
        console.error(error);
      }

      dispatch(chatWindowPopup(true));
    },
    [dispatch, usersList]
  );

  return initiateChat;
};

export default useInitiateChatAndOpenWindow;
