/**
 * 路由权限配置（audit-P1-10 + audit-P1-12）
 *
 * 从 proxy.ts 抽取的路由权限常量，实现配置驱动设计。
 * 新增路由或权限点时只需修改此文件，无需改 proxy.ts 逻辑。
 *
 * 匹配优先级（proxy.ts 按此顺序检查）：
 * 1. 精确路由权限（SPECIFIC_ROUTE_PERMISSIONS）—— 完整路径匹配，优先级最高
 *    用于将 /admin/* 下特定页面开放给非管理员角色
 * 2. 路由前缀权限（ROUTE_PREFIX_PERMISSIONS）—— 前缀匹配
 *    用于角色路由组（/admin、/teacher、/student、/parent、/management）
 *
 * audit-P1-10 扩展：原仅 /admin/ai-settings、/admin/roles、/admin/permissions 三个精确路由例外，
 * 现新增 /admin/announcements、/admin/audit-logs、/admin/elective、/admin/questions、
 * /admin/users、/admin/error-book、/admin/lesson-plans、/admin/course-plans 等子路径细粒度权限，
 * 使拥有对应权限的非管理员角色（如教师）可直接访问 /admin/* 下相关页面。
 */

import { Permissions, type Permission } from "@/shared/types/permissions"

/**
 * 精确路由权限（优先级最高，覆盖前缀匹配）。
 *
 * 用于将 /admin/* 下的特定页面开放给非管理员角色。
 * key 为完整路径（不含 query string），value 为所需权限点。
 *
 * 注意：此表仅控制"是否允许访问此路径"，
 * 页面内的 requirePermission() 仍按各自模块的权限点校验。
 */
export const SPECIFIC_ROUTE_PERMISSIONS: Record<string, Permission> = {
  // V3.1：/admin/ai-settings 对所有 AI_CHAT 用户开放（管理自己的 private provider）
  "/admin/ai-settings": Permissions.AI_CHAT,
  // RBAC：/admin/roles 和 /admin/permissions 使用细粒度权限而非 /admin 前缀的 SCHOOL_MANAGE
  "/admin/roles": Permissions.ROLE_READ,
  "/admin/permissions": Permissions.PERMISSION_READ,
  // audit-P1-10：以下子路径细粒度权限，允许非管理员角色访问
  "/admin/announcements": Permissions.ANNOUNCEMENT_MANAGE,
  "/admin/audit-logs": Permissions.AUDIT_LOG_READ,
  "/admin/audit-logs/overview": Permissions.AUDIT_LOG_READ,
  "/admin/audit-logs/login-logs": Permissions.AUDIT_LOG_READ,
  "/admin/audit-logs/data-changes": Permissions.AUDIT_LOG_READ,
  "/admin/elective": Permissions.ELECTIVE_MANAGE,
  "/admin/questions": Permissions.QUESTION_READ,
  "/admin/users": Permissions.USER_MANAGE,
  // audit-P2-3: 邀请码管理路由（USER_MANAGE 权限，复用用户管理权限）
  "/admin/invitation-codes": Permissions.USER_MANAGE,
  "/admin/error-book": Permissions.ERROR_BOOK_ANALYTICS_READ,
  "/admin/lesson-plans": Permissions.LESSON_PLAN_READ,
  "/admin/course-plans": Permissions.COURSE_PLAN_READ,
}

/**
 * 路由前缀权限（精确路由未命中时按前缀匹配）。
 *
 * key 为路由前缀，value 为所需权限点。
 * 按 Object.entries 顺序检查，命中第一个前缀即停止。
 */
export const ROUTE_PREFIX_PERMISSIONS: Record<string, Permission> = {
  "/admin": Permissions.SCHOOL_MANAGE,
  "/teacher": Permissions.EXAM_CREATE,
  "/student": Permissions.HOMEWORK_SUBMIT,
  "/parent": Permissions.DASHBOARD_PARENT_READ,
  "/management": Permissions.GRADE_MANAGE,
}

/**
 * 仪表盘路由的细粒度权限（覆盖前缀匹配，防止跨角色访问仪表盘）。
 *
 * 防止拥有 EXAM_READ 的学生/家长访问 /teacher/dashboard 等。
 */
export const DASHBOARD_ROUTE_PERMISSIONS: Record<string, Permission> = {
  "/admin/dashboard": Permissions.DASHBOARD_ADMIN_READ,
  "/teacher/dashboard": Permissions.DASHBOARD_TEACHER_READ,
  "/student/dashboard": Permissions.DASHBOARD_STUDENT_READ,
  "/parent/dashboard": Permissions.DASHBOARD_PARENT_READ,
}

/**
 * API 路由前缀权限。
 */
export const API_ROUTE_PERMISSIONS: Record<string, Permission> = {
  "/api/ai/chat": Permissions.AI_CHAT,
}
