import { createRouter, createWebHashHistory } from "vue-router";
import useUserInfoStore from "@/stores/useUserInfoStore";
import useGetCookie from "@/hooks/useGetCookie";
import System from "@/views/system/System.vue";
import SystemFloor from "@/views/system/SystemFloor.vue";

const router = createRouter({
  history: createWebHashHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: "/login",
      name: "login",
      component: () => import("@/views/login/Login.vue"),
    },
    {
      path: "/dashboard",
      index: true,
      name: "dashboard",
      component: () => import("@/views/dashboard/Dashboard.vue"),
    },
    {
      path: "/system/:main_system_id/:sub_system_id",
      name: "system",
      component: () => import("@/views/system/System.vue"),
      children: [
        {
          path: ":floor_id",
          name: "sub_system",
          component: () => import("@/views/system/SystemMain.vue"),
        },
      ],
    },
    {
      path: "/historyData",
      name: "history",
      component: () => import("@/views/history/History.vue"),
    },
    {
      path: "/operation",
      name: "operation",
      component: () => import("@/views/operation/Operation.vue"),
    },
    {
      path: "/graphManagement",
      name: "graphManagement",
      component: () => import("@/views/graphManagement/GraphManagement.vue"),
    },
    {
      path: "/accountManagement",
      name: "accountManagement",
      component: () =>
        import("@/views/accountManagement/AccountManagement.vue"),
    },
    {
      path: "/assetManagement",
      name: "assetManagement",
      component: () => import("@/views/AssetManagement/AssetManagement.vue"),
    },
    {
      path: "/alert",
      name: "alert",
      component: () => import("@/views/alert/AlertManagement.vue"),
    },
    {
      path: "/energyManagement",
      name: "energyManagement",
      component: () => import("@/views/energyManagement/EnergyManagement.vue"),
    },
    {
      path: "/setting/:main_system_id/:sub_system_id/:type",
      name: "setting",
      component: () => import("@/views/setting/SettingManagement.vue"),
    },
    {
      path: "/mytestfile/mjm",
      name: "mytestfile",
      component: () => import("@/views/Test.vue"),
    },
  ],
});

router.beforeEach(async (to, from, next) => {
  console.log("route", to, location, document.cookie);
  // redirect to login page if not logged in and trying to access a restricted page
  const publicPages = ["/login", "/"];
  const authRequired = !publicPages.includes(to.path);
  const auth = useUserInfoStore();
  const token = useGetCookie("JWT-Authorization");
  const user_name = useGetCookie("user_name");

  if (to.path === "/logout") {
    document.cookie = "JWT-Authorization=; Max-Age=0";
    document.cookie = "user_name=; Max-Age=0";
    auth.user.token = "";
    auth.user.user_name = "";
    localStorage.removeItem("EmpowerBuilding");
    window.location.reload();
    next({ path: "/login" });
  }

  if ((authRequired && !token) || to.path === "/") {
    auth.user.token = "";
    next({ path: "/login" });
  } else if (!authRequired) {
    document.cookie = "JWT-Authorization=; Max-Age=0";
    document.cookie = "user_name=; Max-Age=0";
    auth.user.token = "";
    auth.user.user_name = "";
  } else {
    auth.user.token = token;
    auth.user.user_name = user_name;
  }
  next();
});

export default router;
