import { createRouter, createWebHistory } from 'vue-router'
import { useAuthStore } from '@s/useAuthStore';


// 초기 렌더링 속도를 위해 지연 로딩 사용
const routes = [
    {
        path: '/',
        name: "Home",
        component: () => import('@v/MainView.vue'),
        // meta: { requiresAuth: true }
    },
    {
        path: '/board',
        component: () => import('@v/board/TheBoard.vue'),
        children: [
            {
                path: '',
                name: 'BoardList',
                component: () => import('@v/board/BoardList.vue')
            },
            {
                path: 'write',
                component: () => import('@v/board/BoardWrite.vue')
            },
            {
                path: ':id',
                name: 'BoardDetail',
                component: () => import('@v/board/BoardView.vue')
            },
            {
                path: 'edit/:id',
                name: 'BoardEdit',
                component: () => import('@v/board/BoardEdit.vue')
            }
        ]
    },
    {
        path: '/wordDict',
        component: () => import('@v/wordDict/wordDict.vue'),
    },
    {
        path: '/login',
        name: 'Login',
        component: () => import('@v/user/TheLogin.vue'),
        meta: { layout: 'NoLayout', requiresGuest: true },
    },
    {
        path: '/register',
        name: 'Register',
        component: () => import('@v/user/TheRegister.vue'),
        meta: { layout: 'NoLayout', requiresGuest: true },
    },
    {
        path: '/pw',
        name: 'Password',
        component: () => import('@v/user/ThePassword.vue'),
        meta: { layout: 'NoLayout', requiresGuest: true },
    },
    {
        path: '/vacation',
        component: () => import('@v/vacation/VacationManagement.vue'),
    },
    {
        path: '/voteboard',
        component: () => import('@v/voteboard/TheVoteBoard.vue'),
        children: [
            {
                path: '',
                component: () => import('@v/voteboard/voteBoardList.vue')
            },
            {
                path: 'write',
                component: () => import('@v/voteboard/voteboardWrite.vue')
            },

        ]
    },
    {
        path: '/projectlist',
        component: () => import('@v/projectlist/TheProjectList.vue'),
    },
    {
        path: '/sample',
        component: () => import('@c/calendar/SampleCalendar.vue'),
    },
    {
        path: "/:anything(.*)",
        component: () => import('@v/ErrorPage.vue'),
    }
];

const router = createRouter({
    history: createWebHistory(import.meta.env.BASE_URL),
    routes: routes,
})

router.beforeEach(async (to, from, next) => {
    const authStore = useAuthStore();
    await authStore.checkAuthStatus(); // 로그인 상태 확인

    if (to.meta.requiresAuth && !authStore.isAuthenticated) {
        // 로그인이 필요한 페이지인데 로그인되지 않은 경우 → 로그인 페이지로 이동
        next({ name: 'Login' });
    } else if (to.meta.requiresGuest && authStore.isAuthenticated) {
        // 비로그인 사용자만 접근 가능한 페이지인데 로그인된 경우 → 홈으로 이동
        next({ name: 'Home' });
    } else {
        next();
    }
});


router.beforeEach(async (to, from, next) => {
    const authStore = useAuthStore()

    // 최초 앱 로드 시 인증 상태 체크
    await authStore.checkAuthStatus()

    // 현재 라우트에 인증이 필요한지 확인
    const requiresAuth = to.meta.requiresAuth === true

    if (requiresAuth && !authStore.isAuthenticated) {
        // 인증되지 않은 사용자를 로그인 페이지로 리다이렉트
        // 원래 가려던 페이지를 쿼리 파라미터로 전달
        next({
            name: 'Login',
            query: { redirect: to.fullPath }
        })
    } else {
        next()
    }
})

export default router
