<script lang="ts" setup>
import { Toaster } from "@/components/ui/sonner";
import { toast } from "vue-sonner";

const route = useRoute();
const router = useRouter();
const loginState = useLoginState();

const onLoginExpired = () => {
  toast.error("登录过期,请重新登录");
  router.replace("/user/authenticate");
};

watch(
  () => loginState.isLoggedIn,
  (isLoggedIn) => {
    if (!isLoggedIn) {
      toast.info("账号已退出,请重新登录");
      router.replace("/user/authenticate");
    }
  }
);

onBeforeMount(() => {
  if (route.meta.requiresAuth && loginState.isLoggedIn) {
    loginState
      .checkLogin()
      .then((user) => {
        if (!user) {
          onLoginExpired();
        }
      })
      .catch(() => {
        onLoginExpired();
      });
  }
});
</script>

<template>
  <SidebarProvider>
    <TooltipProvider>
      <NuxtLayout>
        <NuxtPage />
      </NuxtLayout>
      <Toaster
        rich-colors
        close-button
        position="top-right"
        class="pointer-events-auto"
      />
    </TooltipProvider>
  </SidebarProvider>
</template>