import { redirect } from "next/navigation";
import authService from "../services/auth";
import { verifyToken } from "./jwt-server";
import { getStoreData, removeStoreData, setStoreData } from "./storagedata";

let interval: NodeJS.Timeout;

const checkAndRefreshToken = async () => {
  console.log("checkAndRefreshToken");
  const token = await getStoreData<string>("token");
  console.log("token");

  if (!token) return;
  const decoded = verifyToken(token);
  if (!decoded?.payload) return;
  console.log("decoded");

  const { exp } = decoded.payload;
  const currentTime = Math.floor(Date.now() / 1000);
  const minutesLeft = (exp - currentTime) / 60;
  console.log("minutesLeft", minutesLeft);

  if (minutesLeft < 30 && minutesLeft > 0) {
    try {
      const refreshResponse = await authService.refreshToken(token);
      if (refreshResponse?.status && refreshResponse?.data?.token) {
        await setStoreData("token", refreshResponse?.data?.token);
      }
    } catch (error) {
      console.error("❌ Token refresh failed:", error);
    }
  } else {
    // setUser(decoded.payload);
  }
};

export const checkToken = async () => {
  interval = setInterval(checkAndRefreshToken, 10 * 60 * 1000);
};

export const userLogout = async () => {
  removeStoreData("token");
  removeStoreData("user");
  setTimeout(() => {
    clearInterval(interval);
    redirect("/");
  }, 500);
};
