<script lang="ts" setup>
import { toast } from 'vue-sonner'
import { Toaster } from '@/components/ui/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>