"use client";

import { useState, useEffect } from "react";
import Cookies from "js-cookie";

export function useUserSession() {
  const [user, setUser] = useState<any | null>(null);
  const [loaded, setLoaded] = useState(false);

  const [kSession, setKSession] = useState<string | null>(null);
  const [kSessionId, setKSessionId] = useState<string | null>(null);

  useEffect(() => {
    try {
      const saved = localStorage.getItem("chat_user");
      const kSession = localStorage.getItem("k_session");
      const kSessionId = localStorage.getItem("k_session_id");
      if (saved) setUser(JSON.parse(saved));
      if (kSession) setKSession(kSession);
      if (kSessionId) setKSessionId(kSessionId);
    } catch {}
    finally {
      setLoaded(true);
    }
  }, []);

  const saveUser = (
    name: string,
    email: string,
    sessionId?: string,
    k_session?: string,
    k_session_id?: string
  ) => {
    const data: any = { name, email, sessionId };
    localStorage.setItem("chat_user", JSON.stringify(data));
    setUser(data);

    if (k_session) {
      localStorage.setItem("k_session", k_session);
      setKSession(k_session);
    }
    if (k_session_id) {
      localStorage.setItem("k_session_id", k_session_id);
      setKSessionId(k_session_id);
    }
  };

  const saveCoreSession = (k_session: string, k_session_id: string) => {
    localStorage.setItem("k_session", k_session);
    localStorage.setItem("k_session_id", k_session_id);
    setKSession(k_session);
    setKSessionId(k_session_id);
  };

  const logoutUser = () => {
    localStorage.removeItem("chat_user");
    localStorage.removeItem("k_session");
    localStorage.removeItem("k_session_id");

    // Use js-cookie to remove — must match how useChatSocket sets them
    Cookies.remove("accessToken", { path: "/" });
    Cookies.remove("refreshToken", { path: "/" });
    Cookies.remove("k_session", { path: "/" });
    Cookies.remove("k_session_id", { path: "/" });

    setUser(null);
    setKSession(null);
    setKSessionId(null);
  };

  return {
    user,
    isLoggedIn: !!user,
    loaded,
    kSession,
    kSessionId,
    saveUser,
    saveCoreSession,
    logoutUser,
  };
}