/**
 * 페이지별 권한 체크 가드
 */
class PermissionGuard {
    constructor() {
        this.pagePermissions = {
            // 문서 관리 관련
            'pdf-manager.html': (user) => user.can_manage_books || user.is_admin,
            'book-documents.html': (user) => user.can_manage_books || user.is_admin,
            'book-editor.html': (user) => user.can_manage_books || user.is_admin,
            
            // 노트 관리 관련
            'notes.html': (user) => user.can_manage_notes || user.is_admin,
            'notebooks.html': (user) => user.can_manage_notes || user.is_admin,
            'note-editor.html': (user) => user.can_manage_notes || user.is_admin,
            'todos.html': (user) => user.can_manage_notes || user.is_admin,
            
            // 소설 관리 관련
            'story-view.html': (user) => user.can_manage_novels || user.is_admin,
            'story-reader.html': (user) => user.can_manage_novels || user.is_admin,
            'memo-tree.html': (user) => user.can_manage_novels || user.is_admin,
            
            // 관리자 전용
            'user-management.html': (user) => user.is_admin,
            'system-settings.html': (user) => user.is_admin,
            'backup-restore.html': (user) => user.is_admin,
            'logs.html': (user) => user.is_admin,
            'setup.html': (user) => user.is_admin,
            
            // 모든 사용자 허용
            'index.html': () => true,
            'search.html': () => true,
            'upload.html': () => true,
            'viewer.html': () => true,
            'login.html': () => true,
            'profile.html': () => true
        };
    }

    /**
     * 현재 페이지의 권한을 체크합니다
     */
    async checkCurrentPagePermission() {
        try {
            // 현재 페이지 파일명 추출
            const currentPage = window.location.pathname.split('/').pop() || 'index.html';
            console.log(`🔐 권한 체크 시작 - 페이지: ${currentPage}`);

            // 권한 체크 함수 가져오기
            const permissionCheck = this.pagePermissions[currentPage];
            
            // 권한 체크가 정의되지 않은 페이지는 허용
            if (!permissionCheck) {
                console.log(`✅ 권한 체크 없음 - 페이지 허용: ${currentPage}`);
                return true;
            }

            // 사용자 정보 가져오기
            const token = localStorage.getItem('access_token');
            if (!token) {
                console.log(`❌ 토큰 없음 - 로그인 페이지로 이동`);
                this.redirectToLogin();
                return false;
            }

            // 먼저 기존 사용자 정보가 있는지 확인 (헤더 상태 보존)
            let user = window.currentUser;
            
            // 사용자 정보가 없으면 API로 조회
            if (!user) {
                const response = await fetch('/api/auth/me', {
                    headers: { 'Authorization': `Bearer ${token}` }
                });

                if (!response.ok) {
                    console.log(`❌ 사용자 정보 조회 실패 - 로그인 페이지로 이동`);
                    this.redirectToLogin();
                    return false;
                }

                user = await response.json();
                // 전역 사용자 정보 저장 (헤더에서 사용)
                window.currentUser = user;
            }

            console.log(`👤 사용자 정보: ${user.email}, 권한: 관리자=${user.is_admin}, 문서=${user.can_manage_books}, 노트=${user.can_manage_notes}, 소설=${user.can_manage_novels}`);

            // 권한 체크 실행
            const hasPermission = permissionCheck(user);
            
            if (hasPermission) {
                console.log(`✅ 권한 확인 - 페이지 접근 허용: ${currentPage}`);
                window.permissionGuardExecuted = true;
                return true;
            } else {
                console.log(`❌ 권한 없음 - 메인 페이지로 이동: ${currentPage}`);
                window.permissionGuardExecuted = true;
                this.redirectToMain();
                return false;
            }

        } catch (error) {
            console.error(`🚫 권한 체크 오류:`, error);
            this.redirectToLogin();
            return false;
        }
    }

    /**
     * 로그인 페이지로 리다이렉트
     */
    redirectToLogin() {
        const currentUrl = encodeURIComponent(window.location.pathname + window.location.search);
        window.location.href = `login.html?redirect=${currentUrl}`;
    }

    /**
     * 메인 페이지로 리다이렉트
     */
    redirectToMain() {
        // 사용자에게 알림 표시
        if (typeof alert !== 'undefined') {
            alert('이 페이지에 접근할 권한이 없습니다. 메인 페이지로 이동합니다.');
        }
        window.location.href = 'index.html';
    }
}

// 전역 인스턴스 생성
window.permissionGuard = new PermissionGuard();

// 헤더 로드 완료 후 권한 체크 실행 (헤더 상태 보존)
document.addEventListener('headerLoaded', () => {
    console.log('🔐 헤더 로드 완료 후 권한 체크 시작');
    // 로그인 페이지는 권한 체크 제외
    const currentPage = window.location.pathname.split('/').pop() || 'index.html';
    if (currentPage !== 'login.html') {
        // 약간의 지연을 두어 헤더 초기화 완료 대기
        setTimeout(() => {
            window.permissionGuard.checkCurrentPagePermission();
        }, 100);
    }
});

// 백업: DOM 로드 완료 시 권한 체크 실행 (헤더 이벤트가 없는 경우)
document.addEventListener('DOMContentLoaded', () => {
    // 헤더 로드 이벤트를 기다리되, 3초 후에는 강제 실행
    setTimeout(() => {
        const currentPage = window.location.pathname.split('/').pop() || 'index.html';
        if (currentPage !== 'login.html' && !window.permissionGuardExecuted) {
            console.log('🔐 백업 권한 체크 실행');
            window.permissionGuard.checkCurrentPagePermission();
        }
    }, 3000);
});
