import { Suspense, useMemo, lazy } from 'react';
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { AuthProvider, useAuth } from '@/app/auth/AuthContext';
import { MainLayout } from '@/app/layout/MainLayout';
import { LoginPage } from '@features/auth';
import { useMenuStore } from '@stores/menuStore';
import { COMPONENT_REGISTRY } from '@/app/componentRegistry';
// 권한 노드 없는 드릴다운 라우트 (인증만 체크)
const VesselDetail = lazy(() => import('@features/vessel').then((m) => ({ default: m.VesselDetail })));
/**
* 권한 가드.
* - user 미인증 시 /login으로 리다이렉트
* - resource 지정 시 hasPermission 체크 → 거부 시 403 표시
*/
function ProtectedRoute({
children,
resource,
operation = 'READ',
}: {
children: React.ReactNode;
resource?: string;
operation?: string;
}) {
const { user, loading, hasPermission } = useAuth();
if (loading) return null;
if (!user) return
이 페이지에 접근하려면 {resource}::{operation} 권한이 필요합니다.