// src/routes/+layout.server.ts
import type { LayoutServerLoad } from './$types';
import jwt from 'jsonwebtoken';
import { JWT_SECRET } from '$env/static/private';

// --- 1. 메뉴 및 역할 정의 ---

// 공통 타입을 정의합니다.
type UserRole = 'admin' | 'user';
type MenuItem = { title: string; path: string };

// 역할별 메뉴 목록을 미리 정의합니다.
const menuConfig: Record<UserRole, MenuItem[]> = {
	// 'admin' (birdhead) 사용자가 볼 메뉴
	admin: [
		{ title: '4. 빅데이터 만들기', path: '/bigdata-generate' },
		{ title: '3. 동영상 관리', path: '/video-manage' },
		{ title: '2. 동영상 구간 편집', path: '/image-generate' },
		{ title: '1. 동영상 업로드 및 crop', path: '/video-crop' }
	],
	// 'user' (그 외) 사용자가 볼 메뉴
	user: [{ title: '4. 빅데이터 만들기', path: '/bigdata-generate' }]
};

// --- 2. load 함수 수정 ---

export const load: LayoutServerLoad = ({ cookies }) => {
	const token = cookies.get('session');

	// 1. 토큰이 없으면: 로그아웃 상태
	if (!token) {
		return { user: null, menuItems: [] }; // 빈 메뉴 반환
	}

	try {
		// 3. JWT 토큰 검증
		const decoded = jwt.verify(token, JWT_SECRET);

		if (typeof decoded === 'object' && decoded !== null && decoded.login_id) {
			// --- 4. 역할(Role) 부여 ---
			const role: UserRole = decoded.login_id === 'birdhead' ? 'admin' : 'user';

			// 5. 사용자 객체에 role을 포함시킵니다.
			const user = {
				id: decoded.id,
				login_id: decoded.login_id,
				name: decoded.name,
				role: role, // user role 추가
				workerId: decoded.id // workerId 추가
			};

			// 6. 역할에 맞는 메뉴를 가져옵니다.
			const menuItems = menuConfig[role];

			// 7. 사용자 정보와 메뉴 목록을 함께 반환
			return { user, menuItems };
		}

		return { user: null, menuItems: [] };
	} catch (err) {
		// 5. 토큰이 유효하지 않은 경우
		console.error('Invalid token:', err);
		cookies.delete('session', { path: '/' });
		return { user: null, menuItems: [] };
	}
};