/**
 * Mock 数据库（开发期 fixtures）
 *
 * 仲裁 ARB-004 §4：MSW 拦截所有 GraphQL/HTTP 请求返回 mock 数据
 * 所有数据符合 src/types/view-models.ts 类型定义
 */
import type {
  UserViewModel,
  RoleViewModel,
  PermissionViewModel,
  ViewportConfigViewModel,
  OrganizationNode,
  AdminClassViewModel,
  AdminTeacherViewModel,
  AdminStudentViewModel,
  AuditLogViewModel,
  AdminDashboardViewModel,
  SystemSettingsViewModel,
  CurrentUser,
  SchoolViewModel,
  GradeViewModel,
  GradeInsightsViewModel,
  DepartmentViewModel,
  AcademicYearViewModel,
  AuditOverviewStats,
  AuditTrendPoint,
  DataChangeLogViewModel,
  LoginLogViewModel,
  AnnouncementViewModel,
  InvitationCodeViewModel,
  FileViewModel,
  FileStats,
  AiProviderViewModel,
  AiUsageViewModel,
  SecurityPolicy,
  FileUploadConfig,
  NotificationConfig,
  BrandConfig,
} from "@/types/view-models";

export const mockCurrentUser: CurrentUser = {
  id: "u-admin-001",
  email: "admin@edu.test",
  name: "系统管理员",
  roles: ["system_admin"],
  permissions: [
    "ADMIN_DASHBOARD_VIEW",
    "ADMIN_SYSTEM_MANAGE",
    "ADMIN_AUDIT_READ",
    "ADMIN_CLASS_READ",
    "ADMIN_CLASS_MANAGE",
    "ADMIN_TEACHER_READ",
    "ADMIN_TEACHER_MANAGE",
    "ADMIN_STUDENT_READ",
    "ADMIN_STUDENT_MANAGE",
    "ADMIN_ORG_MANAGE",
    "ADMIN_SCHOOL_READ",
    "ADMIN_SCHOOL_MANAGE",
    "ADMIN_MONITORING_VIEW",
    "IAM_USER_READ",
    "IAM_USER_CREATE",
    "IAM_USER_UPDATE",
    "IAM_USER_DELETE",
    "IAM_ROLE_READ",
    "IAM_ROLE_CREATE",
    "IAM_ROLE_UPDATE",
    "IAM_ROLE_DELETE",
    "IAM_PERMISSION_READ",
    "IAM_VIEWPORT_READ",
    "IAM_VIEWPORT_UPDATE",
  ],
  dataScope: "ALL",
  schoolId: null,
  schoolName: "Edu 实验学校",
};

export const mockPermissions: PermissionViewModel[] = [
  {
    id: "p-001",
    code: "ADMIN_DASHBOARD_VIEW",
    name: "仪表盘查看",
    description: "查看管理仪表盘",
    resource: "admin.dashboard",
    action: "view",
    isSystem: true,
  },
  {
    id: "p-002",
    code: "ADMIN_SYSTEM_MANAGE",
    name: "系统设置",
    description: "管理系统设置",
    resource: "admin.system",
    action: "manage",
    isSystem: true,
  },
  {
    id: "p-003",
    code: "ADMIN_AUDIT_READ",
    name: "审计日志查看",
    description: "查看审计日志",
    resource: "admin.audit",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-004",
    code: "ADMIN_CLASS_MANAGE",
    name: "班级管理",
    description: "管理班级",
    resource: "admin.class",
    action: "manage",
    isSystem: true,
  },
  {
    id: "p-005",
    code: "ADMIN_CLASS_READ",
    name: "班级查看",
    description: "查看班级",
    resource: "admin.class",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-006",
    code: "ADMIN_TEACHER_MANAGE",
    name: "教师管理",
    description: "管理教师",
    resource: "admin.teacher",
    action: "manage",
    isSystem: true,
  },
  {
    id: "p-007",
    code: "ADMIN_TEACHER_READ",
    name: "教师查看",
    description: "查看教师",
    resource: "admin.teacher",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-008",
    code: "ADMIN_STUDENT_MANAGE",
    name: "学生管理",
    description: "管理学生",
    resource: "admin.student",
    action: "manage",
    isSystem: true,
  },
  {
    id: "p-009",
    code: "ADMIN_STUDENT_READ",
    name: "学生查看",
    description: "查看学生",
    resource: "admin.student",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-010",
    code: "ADMIN_ORG_MANAGE",
    name: "组织管理",
    description: "管理组织架构",
    resource: "admin.org",
    action: "manage",
    isSystem: true,
  },
  {
    id: "p-011",
    code: "ADMIN_SCHOOL_MANAGE",
    name: "学校管理",
    description: "管理学校",
    resource: "admin.school",
    action: "manage",
    isSystem: true,
  },
  {
    id: "p-012",
    code: "ADMIN_SCHOOL_READ",
    name: "学校查看",
    description: "查看学校",
    resource: "admin.school",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-013",
    code: "ADMIN_MONITORING_VIEW",
    name: "监控查看",
    description: "查看系统监控",
    resource: "admin.monitoring",
    action: "view",
    isSystem: true,
  },
  {
    id: "p-101",
    code: "IAM_USER_READ",
    name: "用户查看",
    description: "查看用户",
    resource: "iam.user",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-102",
    code: "IAM_USER_CREATE",
    name: "用户创建",
    description: "创建用户",
    resource: "iam.user",
    action: "create",
    isSystem: true,
  },
  {
    id: "p-103",
    code: "IAM_USER_UPDATE",
    name: "用户更新",
    description: "更新用户",
    resource: "iam.user",
    action: "update",
    isSystem: true,
  },
  {
    id: "p-104",
    code: "IAM_USER_DELETE",
    name: "用户删除",
    description: "删除用户",
    resource: "iam.user",
    action: "delete",
    isSystem: true,
  },
  {
    id: "p-105",
    code: "IAM_ROLE_READ",
    name: "角色查看",
    description: "查看角色",
    resource: "iam.role",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-106",
    code: "IAM_ROLE_CREATE",
    name: "角色创建",
    description: "创建角色",
    resource: "iam.role",
    action: "create",
    isSystem: true,
  },
  {
    id: "p-107",
    code: "IAM_ROLE_UPDATE",
    name: "角色更新",
    description: "更新角色",
    resource: "iam.role",
    action: "update",
    isSystem: true,
  },
  {
    id: "p-108",
    code: "IAM_ROLE_DELETE",
    name: "角色删除",
    description: "删除角色",
    resource: "iam.role",
    action: "delete",
    isSystem: true,
  },
  {
    id: "p-109",
    code: "IAM_PERMISSION_READ",
    name: "权限查看",
    description: "查看权限点",
    resource: "iam.permission",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-110",
    code: "IAM_VIEWPORT_READ",
    name: "视口查看",
    description: "查看视口",
    resource: "iam.viewport",
    action: "read",
    isSystem: true,
  },
  {
    id: "p-111",
    code: "IAM_VIEWPORT_UPDATE",
    name: "视口更新",
    description: "更新视口",
    resource: "iam.viewport",
    action: "update",
    isSystem: true,
  },
];

export const mockRoles: RoleViewModel[] = [
  {
    id: "r-001",
    name: "系统管理员",
    code: "system_admin",
    description: "拥有所有权限",
    permissions: mockPermissions,
    userCount: 2,
    dataScope: "ALL",
    isSystem: true,
    createdAt: 1704067200000,
    updatedAt: 1706745600000,
  },
  {
    id: "r-002",
    name: "学校管理员",
    code: "school_admin",
    description: "管理本校资源",
    permissions: mockPermissions.filter((p) =>
      [
        "ADMIN_DASHBOARD_VIEW",
        "ADMIN_CLASS_MANAGE",
        "ADMIN_TEACHER_READ",
        "ADMIN_STUDENT_READ",
        "ADMIN_ORG_MANAGE",
        "ADMIN_SCHOOL_READ",
        "ADMIN_AUDIT_READ",
      ].includes(p.code),
    ),
    userCount: 5,
    dataScope: "SCHOOL",
    isSystem: true,
    createdAt: 1704067200000,
    updatedAt: 1706745600000,
  },
  {
    id: "r-003",
    name: "年级组长",
    code: "grade_leader",
    description: "管理本年级",
    permissions: mockPermissions.filter((p) =>
      [
        "ADMIN_DASHBOARD_VIEW",
        "ADMIN_CLASS_READ",
        "ADMIN_TEACHER_READ",
        "ADMIN_STUDENT_READ",
      ].includes(p.code),
    ),
    userCount: 8,
    dataScope: "GRADE",
    isSystem: false,
    createdAt: 1704153600000,
    updatedAt: 1706832000000,
  },
  {
    id: "r-004",
    name: "班主任",
    code: "head_teacher",
    description: "管理本班级",
    permissions: mockPermissions.filter((p) =>
      ["ADMIN_DASHBOARD_VIEW", "ADMIN_STUDENT_READ"].includes(p.code),
    ),
    userCount: 24,
    dataScope: "CLASS",
    isSystem: false,
    createdAt: 1704240000000,
    updatedAt: 1706918400000,
  },
];

export const mockUsers: UserViewModel[] = [
  {
    id: "u-001",
    email: "admin@edu.test",
    name: "系统管理员",
    roles: [mockRoles[0]!],
    status: "active",
    dataScope: "ALL",
    organizationId: null,
    schoolName: "Edu 实验学校",
    lastLoginAt: 1706918400000,
    createdAt: 1704067200000,
    updatedAt: 1706745600000,
  },
  {
    id: "u-002",
    email: "principal@edu.test",
    name: "张校长",
    roles: [mockRoles[1]!],
    status: "active",
    dataScope: "SCHOOL",
    organizationId: "org-school-001",
    schoolName: "Edu 实验学校",
    lastLoginAt: 1706832000000,
    createdAt: 1704153600000,
    updatedAt: 1706832000000,
  },
  {
    id: "u-003",
    email: "gradeleader@edu.test",
    name: "李组长",
    roles: [mockRoles[2]!],
    status: "active",
    dataScope: "GRADE",
    organizationId: "org-grade-001",
    schoolName: "Edu 实验学校",
    lastLoginAt: 1706745600000,
    createdAt: 1704240000000,
    updatedAt: 1706745600000,
  },
  {
    id: "u-004",
    email: "teacher1@edu.test",
    name: "王老师",
    roles: [mockRoles[3]!],
    status: "active",
    dataScope: "CLASS",
    organizationId: "org-class-001",
    schoolName: "Edu 实验学校",
    lastLoginAt: 1706688000000,
    createdAt: 1704326400000,
    updatedAt: 1706688000000,
  },
  {
    id: "u-005",
    email: "teacher2@edu.test",
    name: "赵老师",
    roles: [mockRoles[3]!],
    status: "disabled",
    dataScope: "CLASS",
    organizationId: "org-class-002",
    schoolName: "Edu 实验学校",
    lastLoginAt: 1704326400000,
    createdAt: 1704412800000,
    updatedAt: 1706601600000,
  },
  {
    id: "u-006",
    email: "teacher3@edu.test",
    name: "钱老师",
    roles: [mockRoles[2]!, mockRoles[3]!],
    status: "locked",
    dataScope: "GRADE",
    organizationId: "org-grade-002",
    schoolName: "Edu 实验学校",
    lastLoginAt: 1706515200000,
    createdAt: 1704499200000,
    updatedAt: 1706515200000,
  },
];

export const mockViewports: ViewportConfigViewModel[] = [
  {
    id: "v-001",
    key: "dashboard",
    label: "工作台",
    route: "/dashboard",
    icon: "home",
    sortOrder: 1,
    requiredPermission: null,
    scope: "teacher",
    isVisible: true,
  },
  {
    id: "v-002",
    key: "classes",
    label: "我的班级",
    route: "/classes",
    icon: "users",
    sortOrder: 2,
    requiredPermission: "TEACHER_CLASS_READ",
    scope: "teacher",
    isVisible: true,
  },
  {
    id: "v-003",
    key: "exams",
    label: "考试管理",
    route: "/exams",
    icon: "file-text",
    sortOrder: 3,
    requiredPermission: "TEACHER_EXAM_READ",
    scope: "teacher",
    isVisible: true,
  },
  {
    id: "v-004",
    key: "homework",
    label: "作业管理",
    route: "/homework",
    icon: "book",
    sortOrder: 4,
    requiredPermission: "TEACHER_HOMEWORK_READ",
    scope: "teacher",
    isVisible: true,
  },
  {
    id: "v-005",
    key: "students",
    label: "学生中心",
    route: "/students",
    icon: "user",
    sortOrder: 5,
    requiredPermission: "STUDENT_READ",
    scope: "student",
    isVisible: true,
  },
  {
    id: "v-006",
    key: "parent",
    label: "家长视口",
    route: "/parent",
    icon: "heart",
    sortOrder: 6,
    requiredPermission: "PARENT_VIEW",
    scope: "parent",
    isVisible: true,
  },
  {
    id: "v-007",
    key: "admin",
    label: "管理端",
    route: "/admin",
    icon: "settings",
    sortOrder: 7,
    requiredPermission: "ADMIN_DASHBOARD_VIEW",
    scope: "admin",
    isVisible: true,
  },
];

export const mockOrganization: OrganizationNode[] = [
  {
    id: "org-school-001",
    name: "Edu 实验学校",
    type: "school",
    parentId: null,
    childrenCount: 3,
    sortOrder: 1,
  },
  {
    id: "org-grade-001",
    name: "一年级",
    type: "grade",
    parentId: "org-school-001",
    childrenCount: 4,
    sortOrder: 1,
  },
  {
    id: "org-grade-002",
    name: "二年级",
    type: "grade",
    parentId: "org-school-001",
    childrenCount: 4,
    sortOrder: 2,
  },
  {
    id: "org-grade-003",
    name: "三年级",
    type: "grade",
    parentId: "org-school-001",
    childrenCount: 3,
    sortOrder: 3,
  },
  {
    id: "org-class-001",
    name: "一年级一班",
    type: "class",
    parentId: "org-grade-001",
    childrenCount: 0,
    sortOrder: 1,
  },
  {
    id: "org-class-002",
    name: "一年级二班",
    type: "class",
    parentId: "org-grade-001",
    childrenCount: 0,
    sortOrder: 2,
  },
  {
    id: "org-class-003",
    name: "一年级三班",
    type: "class",
    parentId: "org-grade-001",
    childrenCount: 0,
    sortOrder: 3,
  },
  {
    id: "org-class-004",
    name: "一年级四班",
    type: "class",
    parentId: "org-grade-001",
    childrenCount: 0,
    sortOrder: 4,
  },
  {
    id: "org-class-005",
    name: "二年级一班",
    type: "class",
    parentId: "org-grade-002",
    childrenCount: 0,
    sortOrder: 1,
  },
  {
    id: "org-class-006",
    name: "二年级二班",
    type: "class",
    parentId: "org-grade-002",
    childrenCount: 0,
    sortOrder: 2,
  },
  {
    id: "org-class-007",
    name: "二年级三班",
    type: "class",
    parentId: "org-grade-002",
    childrenCount: 0,
    sortOrder: 3,
  },
  {
    id: "org-class-008",
    name: "二年级四班",
    type: "class",
    parentId: "org-grade-002",
    childrenCount: 0,
    sortOrder: 4,
  },
];

export const mockClasses: AdminClassViewModel[] = [
  {
    id: "c-001",
    name: "一年级一班",
    gradeName: "一年级",
    schoolName: "Edu 实验学校",
    headTeacherName: "王老师",
    studentCount: 36,
    createdAt: 1704067200000,
  },
  {
    id: "c-002",
    name: "一年级二班",
    gradeName: "一年级",
    schoolName: "Edu 实验学校",
    headTeacherName: "赵老师",
    studentCount: 35,
    createdAt: 1704067200000,
  },
  {
    id: "c-003",
    name: "一年级三班",
    gradeName: "一年级",
    schoolName: "Edu 实验学校",
    headTeacherName: "钱老师",
    studentCount: 34,
    createdAt: 1704067200000,
  },
  {
    id: "c-004",
    name: "二年级一班",
    gradeName: "二年级",
    schoolName: "Edu 实验学校",
    headTeacherName: "孙老师",
    studentCount: 38,
    createdAt: 1704067200000,
  },
  {
    id: "c-005",
    name: "二年级二班",
    gradeName: "二年级",
    schoolName: "Edu 实验学校",
    headTeacherName: "周老师",
    studentCount: 37,
    createdAt: 1704067200000,
  },
  {
    id: "c-006",
    name: "三年级一班",
    gradeName: "三年级",
    schoolName: "Edu 实验学校",
    headTeacherName: "吴老师",
    studentCount: 33,
    createdAt: 1704067200000,
  },
];

export const mockTeachers: AdminTeacherViewModel[] = [
  {
    id: "t-001",
    email: "teacher1@edu.test",
    name: "王老师",
    schoolName: "Edu 实验学校",
    subjects: ["语文", "阅读"],
    classCount: 1,
    status: "active",
    lastLoginAt: 1706688000000,
  },
  {
    id: "t-002",
    email: "teacher2@edu.test",
    name: "赵老师",
    schoolName: "Edu 实验学校",
    subjects: ["数学"],
    classCount: 1,
    status: "disabled",
    lastLoginAt: 1704326400000,
  },
  {
    id: "t-003",
    email: "teacher3@edu.test",
    name: "钱老师",
    schoolName: "Edu 实验学校",
    subjects: ["英语"],
    classCount: 2,
    status: "locked",
    lastLoginAt: 1706515200000,
  },
  {
    id: "t-004",
    email: "teacher4@edu.test",
    name: "孙老师",
    schoolName: "Edu 实验学校",
    subjects: ["物理", "科学"],
    classCount: 1,
    status: "active",
    lastLoginAt: 1706601600000,
  },
  {
    id: "t-005",
    email: "teacher5@edu.test",
    name: "周老师",
    schoolName: "Edu 实验学校",
    subjects: ["化学"],
    classCount: 1,
    status: "active",
    lastLoginAt: 1706688000000,
  },
  {
    id: "t-006",
    email: "teacher6@edu.test",
    name: "吴老师",
    schoolName: "Edu 实验学校",
    subjects: ["生物"],
    classCount: 1,
    status: "active",
    lastLoginAt: 1706745600000,
  },
];

export const mockStudents: AdminStudentViewModel[] = [
  {
    id: "s-001",
    email: "student1@edu.test",
    name: "小明",
    className: "一年级一班",
    gradeName: "一年级",
    schoolName: "Edu 实验学校",
    guardianName: "大明",
    guardianPhone: "13800000001",
    status: "active",
  },
  {
    id: "s-002",
    email: "student2@edu.test",
    name: "小红",
    className: "一年级一班",
    gradeName: "一年级",
    schoolName: "Edu 实验学校",
    guardianName: "大红",
    guardianPhone: "13800000002",
    status: "active",
  },
  {
    id: "s-003",
    email: "student3@edu.test",
    name: "小华",
    className: "一年级二班",
    gradeName: "一年级",
    schoolName: "Edu 实验学校",
    guardianName: "大华",
    guardianPhone: "13800000003",
    status: "active",
  },
  {
    id: "s-004",
    email: "student4@edu.test",
    name: "小芳",
    className: "二年级一班",
    gradeName: "二年级",
    schoolName: "Edu 实验学校",
    guardianName: "大芳",
    guardianPhone: "13800000004",
    status: "disabled",
  },
  {
    id: "s-005",
    email: "student5@edu.test",
    name: "小军",
    className: "三年级一班",
    gradeName: "三年级",
    schoolName: "Edu 实验学校",
    guardianName: "大军",
    guardianPhone: "13800000005",
    status: "active",
  },
];

export const mockAuditLogs: AuditLogViewModel[] = [
  {
    id: "al-001",
    eventId: "evt-001",
    occurredAt: 1706918400000,
    actorUserId: "u-001",
    actorName: "系统管理员",
    action: "USER_LOGIN",
    resourceType: "iam.user",
    resourceId: "u-001",
    ip: "192.168.1.100",
    userAgent: "Mozilla/5.0",
    beforeState: null,
    afterState: null,
    traceId: "trace-001",
  },
  {
    id: "al-002",
    eventId: "evt-002",
    occurredAt: 1706832000000,
    actorUserId: "u-001",
    actorName: "系统管理员",
    action: "USER_CREATE",
    resourceType: "iam.user",
    resourceId: "u-006",
    ip: "192.168.1.100",
    userAgent: "Mozilla/5.0",
    beforeState: null,
    afterState: '{"email":"teacher3@edu.test","name":"钱老师"}',
    traceId: "trace-002",
  },
  {
    id: "al-003",
    eventId: "evt-003",
    occurredAt: 1706745600000,
    actorUserId: "u-002",
    actorName: "张校长",
    action: "ROLE_UPDATE",
    resourceType: "iam.role",
    resourceId: "r-002",
    ip: "192.168.1.101",
    userAgent: "Mozilla/5.0",
    beforeState: '{"permissions":["ADMIN_DASHBOARD_VIEW"]}',
    afterState: '{"permissions":["ADMIN_DASHBOARD_VIEW","ADMIN_CLASS_MANAGE"]}',
    traceId: "trace-003",
  },
  {
    id: "al-004",
    eventId: "evt-004",
    occurredAt: 1706688000000,
    actorUserId: "u-001",
    actorName: "系统管理员",
    action: "USER_TOGGLE_STATUS",
    resourceType: "iam.user",
    resourceId: "u-005",
    ip: "192.168.1.100",
    userAgent: "Mozilla/5.0",
    beforeState: '{"status":"active"}',
    afterState: '{"status":"disabled"}',
    traceId: "trace-004",
  },
  {
    id: "al-005",
    eventId: "evt-005",
    occurredAt: 1706601600000,
    actorUserId: "system",
    actorName: "系统",
    action: "ABNORMAL_LOGIN_BLOCKED",
    resourceType: "iam.user",
    resourceId: "u-006",
    ip: "10.0.0.99",
    userAgent: "curl/7.68",
    beforeState: null,
    afterState: null,
    traceId: "trace-005",
  },
];

export const mockDashboard: AdminDashboardViewModel = {
  totalTeachers: 6,
  totalStudents: 213,
  totalClasses: 6,
  totalSchools: 1,
  schoolAvgScore: 85.6,
  activeUsersToday: 28,
  auditEventsToday: 12,
  trend: [
    { date: "2026-07-04", teachers: 4, students: 198, avgScore: 84.2 },
    { date: "2026-07-05", teachers: 5, students: 205, avgScore: 84.8 },
    { date: "2026-07-06", teachers: 5, students: 210, avgScore: 85.1 },
    { date: "2026-07-07", teachers: 6, students: 211, avgScore: 85.3 },
    { date: "2026-07-08", teachers: 6, students: 213, avgScore: 85.6 },
    { date: "2026-07-09", teachers: 6, students: 213, avgScore: 85.5 },
    { date: "2026-07-10", teachers: 6, students: 213, avgScore: 85.6 },
  ],
  serviceHealth: [
    { serviceName: "api-gateway", status: "healthy", latencyMs: 12 },
    { serviceName: "iam", status: "healthy", latencyMs: 28 },
    { serviceName: "teacher-bff", status: "healthy", latencyMs: 45 },
    { serviceName: "classes", status: "healthy", latencyMs: 35 },
    { serviceName: "core-edu", status: "healthy", latencyMs: 52 },
    { serviceName: "msg", status: "degraded", latencyMs: 280 },
    { serviceName: "data-ana", status: "healthy", latencyMs: 120 },
  ],
};

export const mockSystemSettings: SystemSettingsViewModel = {
  schoolName: "Edu 实验学校",
  schoolCode: "EDU-001",
  academicYear: "2025-2026",
  semester: "second",
  contactEmail: "contact@edu.test",
  contactPhone: "010-88888888",
  address: "北京市海淀区中关村大街 1 号",
  timezone: "Asia/Shanghai",
  locale: "zh-CN",
};

/** 生成简单 ID */
export function genId(prefix: string): string {
  return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
}

// ─── 学校组织管理细化 ──────────────────────────────────────────────

export const mockSchools: SchoolViewModel[] = [
  {
    id: "sch-001",
    name: "Edu 实验学校",
    code: "EDU-001",
    address: "北京市海淀区中关村大街 1 号",
    contactPhone: "010-88888888",
    contactEmail: "contact@edu.test",
    principalName: "张校长",
    gradeCount: 6,
    classCount: 24,
    studentCount: 1200,
    teacherCount: 80,
    createdAt: Date.now() - 86400000 * 365,
  },
  {
    id: "sch-002",
    name: "Edu 附属中学",
    code: "EDU-002",
    address: "北京市西城区西长安街 2 号",
    contactPhone: "010-66666666",
    contactEmail: "fz@edu.test",
    principalName: "李校长",
    gradeCount: 3,
    classCount: 18,
    studentCount: 900,
    teacherCount: 60,
    createdAt: Date.now() - 86400000 * 300,
  },
];

export const mockGrades: GradeViewModel[] = [
  {
    id: "grd-001",
    name: "一年级",
    schoolId: "sch-001",
    schoolName: "Edu 实验学校",
    directorName: "王主任",
    classCount: 4,
    studentCount: 200,
    sortOrder: 1,
    createdAt: Date.now() - 86400000 * 300,
  },
  {
    id: "grd-002",
    name: "二年级",
    schoolId: "sch-001",
    schoolName: "Edu 实验学校",
    directorName: "刘主任",
    classCount: 4,
    studentCount: 210,
    sortOrder: 2,
    createdAt: Date.now() - 86400000 * 300,
  },
  {
    id: "grd-003",
    name: "三年级",
    schoolId: "sch-001",
    schoolName: "Edu 实验学校",
    directorName: "陈主任",
    classCount: 4,
    studentCount: 195,
    sortOrder: 3,
    createdAt: Date.now() - 86400000 * 300,
  },
  {
    id: "grd-004",
    name: "初一",
    schoolId: "sch-002",
    schoolName: "Edu 附属中学",
    directorName: "赵主任",
    classCount: 6,
    studentCount: 300,
    sortOrder: 1,
    createdAt: Date.now() - 86400000 * 250,
  },
];

export const mockGradeInsights: GradeInsightsViewModel = {
  gradeId: "grd-001",
  gradeName: "一年级",
  schoolWideSummary: {
    totalStudents: 1200,
    totalClasses: 24,
    avgScore: 82.5,
    passingRate: 0.95,
  },
  homeworkTimeline: [
    {
      homeworkId: "hw-001",
      title: "数学练习一",
      className: "一班",
      avgScore: 85,
      submittedCount: 48,
      totalCount: 50,
      dueDate: "2026-07-10",
    },
    {
      homeworkId: "hw-002",
      title: "语文阅读",
      className: "二班",
      avgScore: 78,
      submittedCount: 45,
      totalCount: 50,
      dueDate: "2026-07-11",
    },
    {
      homeworkId: "hw-003",
      title: "英语听力",
      className: "三班",
      avgScore: 82,
      submittedCount: 50,
      totalCount: 50,
      dueDate: "2026-07-12",
    },
    {
      homeworkId: "hw-004",
      title: "数学练习二",
      className: "四班",
      avgScore: 88,
      submittedCount: 47,
      totalCount: 50,
      dueDate: "2026-07-13",
    },
  ],
  classRankings: [
    {
      classId: "cls-001",
      className: "一班",
      avgScore: 85.2,
      rank: 1,
      delta: 2.1,
    },
    {
      classId: "cls-002",
      className: "四班",
      avgScore: 83.8,
      rank: 2,
      delta: -0.5,
    },
    {
      classId: "cls-003",
      className: "二班",
      avgScore: 81.5,
      rank: 3,
      delta: 1.3,
    },
    {
      classId: "cls-004",
      className: "三班",
      avgScore: 79.6,
      rank: 4,
      delta: -1.2,
    },
  ],
};

export const mockDepartments: DepartmentViewModel[] = [
  {
    id: "dept-001",
    name: "数学教研组",
    schoolId: "sch-001",
    schoolName: "Edu 实验学校",
    leaderName: "王老师",
    memberCount: 12,
    subject: "数学",
    createdAt: Date.now() - 86400000 * 200,
  },
  {
    id: "dept-002",
    name: "语文教研组",
    schoolId: "sch-001",
    schoolName: "Edu 实验学校",
    leaderName: "李老师",
    memberCount: 10,
    subject: "语文",
    createdAt: Date.now() - 86400000 * 200,
  },
  {
    id: "dept-003",
    name: "英语教研组",
    schoolId: "sch-001",
    schoolName: "Edu 实验学校",
    leaderName: "张老师",
    memberCount: 8,
    subject: "英语",
    createdAt: Date.now() - 86400000 * 200,
  },
  {
    id: "dept-004",
    name: "理科教研组",
    schoolId: "sch-002",
    schoolName: "Edu 附属中学",
    leaderName: "赵老师",
    memberCount: 15,
    subject: "物理",
    createdAt: Date.now() - 86400000 * 180,
  },
];

export const mockAcademicYears: AcademicYearViewModel[] = [
  {
    id: "ay-001",
    name: "2025-2026学年",
    startDate: "2025-09-01",
    endDate: "2026-07-15",
    firstSemesterStart: "2025-09-01",
    firstSemesterEnd: "2026-01-15",
    secondSemesterStart: "2026-02-15",
    secondSemesterEnd: "2026-07-15",
    isCurrent: true,
    createdAt: Date.now() - 86400000 * 300,
  },
  {
    id: "ay-002",
    name: "2024-2025学年",
    startDate: "2024-09-01",
    endDate: "2025-07-15",
    firstSemesterStart: "2024-09-01",
    firstSemesterEnd: "2025-01-15",
    secondSemesterStart: "2025-02-15",
    secondSemesterEnd: "2025-07-15",
    isCurrent: false,
    createdAt: Date.now() - 86400000 * 665,
  },
];

// ─── 审计日志子模块 ─────────────────────────────────────────────────

export const mockAuditOverviewStats: AuditOverviewStats = {
  totalEvents: 15420,
  todayEvents: 86,
  uniqueActors: 142,
  failedActions: 23,
  topActions: [
    { action: "USER_LOGIN", count: 3200 },
    { action: "USER_CREATE", count: 156 },
    { action: "USER_UPDATE", count: 892 },
    { action: "ROLE_UPDATE", count: 45 },
    { action: "SYSTEM_SETTINGS_UPDATE", count: 12 },
  ],
  topResources: [
    { resource: "user", count: 4200 },
    { resource: "role", count: 380 },
    { resource: "viewport", count: 120 },
    { resource: "system_settings", count: 45 },
  ],
};

export const mockAuditTrend: AuditTrendPoint[] = Array.from(
  { length: 7 },
  (_, i) => {
    const d = new Date();
    d.setDate(d.getDate() - (6 - i));
    return {
      date: d.toISOString().slice(0, 10),
      count: Math.floor(50 + Math.random() * 50),
      action: "USER_LOGIN",
    };
  },
);

export const mockDataChangeLogs: DataChangeLogViewModel[] = [
  {
    id: "dcl-001",
    occurredAt: Date.now() - 3600000,
    actorUserId: "u-admin-001",
    actorName: "系统管理员",
    tableName: "users",
    action: "create",
    recordId: "u-006",
    beforeState: null,
    afterState: '{"email":"new@edu.test","name":"新用户"}',
    ip: "192.168.1.1",
  },
  {
    id: "dcl-002",
    occurredAt: Date.now() - 7200000,
    actorUserId: "u-admin-001",
    actorName: "系统管理员",
    tableName: "roles",
    action: "update",
    recordId: "r-002",
    beforeState: '{"name":"教师"}',
    afterState: '{"name":"教师","permissions":["READ","WRITE"]}',
    ip: "192.168.1.1",
  },
  {
    id: "dcl-003",
    occurredAt: Date.now() - 10800000,
    actorUserId: "u-admin-001",
    actorName: "系统管理员",
    tableName: "users",
    action: "delete",
    recordId: "u-005",
    beforeState: '{"email":"old@edu.test"}',
    afterState: null,
    ip: "192.168.1.1",
  },
  {
    id: "dcl-004",
    occurredAt: Date.now() - 14400000,
    actorUserId: "u-admin-001",
    actorName: "系统管理员",
    tableName: "viewports",
    action: "update",
    recordId: "v-001",
    beforeState: '{"sortOrder":1}',
    afterState: '{"sortOrder":2}',
    ip: "192.168.1.1",
  },
  {
    id: "dcl-005",
    occurredAt: Date.now() - 18000000,
    actorUserId: "u-admin-001",
    actorName: "系统管理员",
    tableName: "system_settings",
    action: "update",
    recordId: "settings",
    beforeState: '{"schoolName":"旧名称"}',
    afterState: '{"schoolName":"Edu 实验学校"}',
    ip: "192.168.1.1",
  },
];

export const mockLoginLogs: LoginLogViewModel[] = [
  {
    id: "ll-001",
    occurredAt: Date.now() - 1800000,
    userId: "u-admin-001",
    userName: "系统管理员",
    action: "signin",
    status: "success",
    ip: "192.168.1.1",
    userAgent: "Chrome/126.0",
    failureReason: null,
  },
  {
    id: "ll-002",
    occurredAt: Date.now() - 3600000,
    userId: "u-002",
    userName: "王老师",
    action: "signin",
    status: "success",
    ip: "10.0.0.5",
    userAgent: "Firefox/127.0",
    failureReason: null,
  },
  {
    id: "ll-003",
    occurredAt: Date.now() - 5400000,
    userId: "unknown",
    userName: "unknown",
    action: "signin",
    status: "failure",
    ip: "203.0.113.5",
    userAgent: "curl/8.0",
    failureReason: "密码错误",
  },
  {
    id: "ll-004",
    occurredAt: Date.now() - 7200000,
    userId: "u-003",
    userName: "李老师",
    action: "signout",
    status: "success",
    ip: "10.0.0.8",
    userAgent: "Chrome/126.0",
    failureReason: null,
  },
  {
    id: "ll-005",
    occurredAt: Date.now() - 9000000,
    userId: "u-006",
    userName: "新用户",
    action: "signup",
    status: "success",
    ip: "10.0.0.12",
    userAgent: "Safari/17.0",
    failureReason: null,
  },
  {
    id: "ll-006",
    occurredAt: Date.now() - 10800000,
    userId: "unknown",
    userName: "unknown",
    action: "signin",
    status: "failure",
    ip: "198.51.100.1",
    userAgent: "bot/1.0",
    failureReason: "账户锁定",
  },
];

// ─── 公告管理 ───────────────────────────────────────────────────────

export const mockAnnouncements: AnnouncementViewModel[] = [
  {
    id: "ann-001",
    title: "2026年春季学期开学通知",
    content:
      "各位师生：2026年春季学期将于2月15日正式开学，请提前做好准备工作。",
    status: "published",
    audience: ["all"],
    authorName: "系统管理员",
    isPinned: true,
    readCount: 1150,
    totalCount: 1200,
    publishedAt: Date.now() - 86400000 * 3,
    createdAt: Date.now() - 86400000 * 5,
    updatedAt: Date.now() - 86400000 * 3,
  },
  {
    id: "ann-002",
    title: "期中考试安排",
    content: "期中考试将于第10周进行，具体安排另行通知。",
    status: "published",
    audience: ["teachers", "students"],
    authorName: "系统管理员",
    isPinned: false,
    readCount: 800,
    totalCount: 1280,
    publishedAt: Date.now() - 86400000 * 2,
    createdAt: Date.now() - 86400000 * 4,
    updatedAt: Date.now() - 86400000 * 2,
  },
  {
    id: "ann-003",
    title: "家长会通知（草稿）",
    content: "定于下周六召开家长会，具体时间待定。",
    status: "draft",
    audience: ["parents"],
    authorName: "系统管理员",
    isPinned: false,
    readCount: 0,
    totalCount: 0,
    publishedAt: null,
    createdAt: Date.now() - 86400000,
    updatedAt: Date.now() - 86400000,
  },
  {
    id: "ann-004",
    title: "寒假放假通知",
    content: "寒假时间为1月16日至2月14日。",
    status: "archived",
    audience: ["all"],
    authorName: "系统管理员",
    isPinned: false,
    readCount: 1190,
    totalCount: 1200,
    publishedAt: Date.now() - 86400000 * 30,
    createdAt: Date.now() - 86400000 * 32,
    updatedAt: Date.now() - 86400000 * 25,
  },
];

// ─── 邀请码管理 ─────────────────────────────────────────────────────

export const mockInvitationCodes: InvitationCodeViewModel[] = [
  {
    id: "ic-001",
    code: "AB3D7F9H",
    status: "unused",
    roleId: "r-001",
    roleName: "教师",
    classId: null,
    className: null,
    email: null,
    batchId: "bat-001",
    usedBy: null,
    usedByName: null,
    usedAt: null,
    createdAt: Date.now() - 86400000,
    expiresAt: Date.now() + 86400000 * 30,
  },
  {
    id: "ic-002",
    code: "JC5K8M2P",
    status: "unused",
    roleId: "r-002",
    roleName: "学生",
    classId: "cls-001",
    className: "一年级一班",
    email: null,
    batchId: "bat-001",
    usedBy: null,
    usedByName: null,
    usedAt: null,
    createdAt: Date.now() - 86400000,
    expiresAt: Date.now() + 86400000 * 30,
  },
  {
    id: "ic-003",
    code: "QR7S4T6V",
    status: "used",
    roleId: "r-003",
    roleName: "家长",
    classId: null,
    className: null,
    email: "parent@edu.test",
    batchId: "bat-001",
    usedBy: "u-007",
    usedByName: "张家长",
    usedAt: Date.now() - 3600000,
    createdAt: Date.now() - 86400000,
    expiresAt: Date.now() + 86400000 * 30,
  },
  {
    id: "ic-004",
    code: "WX9Y2Z4B",
    status: "expired",
    roleId: null,
    roleName: null,
    classId: null,
    className: null,
    email: null,
    batchId: "bat-000",
    usedBy: null,
    usedByName: null,
    usedAt: null,
    createdAt: Date.now() - 86400000 * 60,
    expiresAt: Date.now() - 86400000 * 30,
  },
];

// ─── 文件管理 ───────────────────────────────────────────────────────

export const mockFiles: FileViewModel[] = [
  {
    id: "file-001",
    filename: "期中考试试卷.pdf",
    mimeType: "application/pdf",
    size: 1024000,
    url: "/files/exam-mid.pdf",
    entityType: "exam",
    entityId: "exam-001",
    uploadedByName: "王老师",
    createdAt: Date.now() - 86400000 * 3,
  },
  {
    id: "file-002",
    filename: "数学课件.pptx",
    mimeType:
      "application/vnd.openxmlformats-officedocument.presentationml.presentation",
    size: 5120000,
    url: "/files/math.pptx",
    entityType: "lesson_plan",
    entityId: "lp-001",
    uploadedByName: "李老师",
    createdAt: Date.now() - 86400000 * 2,
  },
  {
    id: "file-003",
    filename: "学生头像.jpg",
    mimeType: "image/jpeg",
    size: 256000,
    url: "/files/avatar.jpg",
    entityType: "user_avatar",
    entityId: "u-005",
    uploadedByName: "系统管理员",
    createdAt: Date.now() - 86400000,
  },
  {
    id: "file-004",
    filename: "开学通知.docx",
    mimeType:
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
    size: 89000,
    url: "/files/notice.docx",
    entityType: "announcement",
    entityId: "ann-001",
    uploadedByName: "系统管理员",
    createdAt: Date.now() - 86400000 * 5,
  },
  {
    id: "file-005",
    filename: "成绩统计.xlsx",
    mimeType:
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
    size: 348000,
    url: "/files/grades.xlsx",
    entityType: "homework",
    entityId: "hw-001",
    uploadedByName: "王老师",
    createdAt: Date.now() - 86400000 * 7,
  },
];

export const mockFileStats: FileStats = {
  totalFiles: 348,
  totalSize: 2840000000,
  byMimeType: [
    { mimeType: "application/pdf", count: 85, size: 95000000 },
    { mimeType: "image/jpeg", count: 120, size: 340000000 },
    {
      mimeType:
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      count: 45,
      size: 12000000,
    },
    {
      mimeType:
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      count: 30,
      size: 8900000,
    },
    { mimeType: "video/mp4", count: 12, size: 2300000000 },
  ],
  byEntityType: [
    { entityType: "exam", count: 85 },
    { entityType: "lesson_plan", count: 60 },
    { entityType: "user_avatar", count: 120 },
    { entityType: "announcement", count: 25 },
    { entityType: "homework", count: 58 },
  ],
};

// ─── AI 配置 ─────────────────────────────────────────────────────────

export const mockAiProviders: AiProviderViewModel[] = [
  {
    id: "aip-001",
    name: "OpenAI",
    type: "openai",
    isPublic: true,
    isActive: true,
    model: "gpt-4o",
    apiBase: "https://api.openai.com/v1",
    createdBy: "系统管理员",
    createdAt: Date.now() - 86400000 * 30,
  },
  {
    id: "aip-002",
    name: "通义千问",
    type: "qwen",
    isPublic: true,
    isActive: true,
    model: "qwen-max",
    apiBase: "https://dashscope.aliyuncs.com/api/v1",
    createdBy: "系统管理员",
    createdAt: Date.now() - 86400000 * 20,
  },
  {
    id: "aip-003",
    name: "个人 DeepSeek",
    type: "deepseek",
    isPublic: false,
    isActive: false,
    model: "deepseek-chat",
    apiBase: "https://api.deepseek.com/v1",
    createdBy: "王老师",
    createdAt: Date.now() - 86400000 * 10,
  },
];

export const mockAiUsage: AiUsageViewModel = {
  totalRequests: 12580,
  totalTokens: 4520000,
  totalCost: 68.5,
  byProvider: [
    { providerName: "OpenAI", requests: 8200, tokens: 3200000, cost: 52.3 },
    { providerName: "通义千问", requests: 3380, tokens: 1100000, cost: 12.8 },
    {
      providerName: "个人 DeepSeek",
      requests: 1000,
      tokens: 220000,
      cost: 3.4,
    },
  ],
  byDay: Array.from({ length: 7 }, (_, i) => {
    const d = new Date();
    d.setDate(d.getDate() - (6 - i));
    return {
      date: d.toISOString().slice(0, 10),
      requests: Math.floor(800 + Math.random() * 400),
      tokens: Math.floor(300000 + Math.random() * 200000),
    };
  }),
};

// ─── 增强系统设置 ───────────────────────────────────────────────────

export const mockSecurityPolicy: SecurityPolicy = {
  passwordMinLength: 8,
  passwordRequireSpecial: true,
  passwordRequireUppercase: true,
  sessionTimeoutMinutes: 30,
  forcePasswordChange: false,
};

export const mockFileUploadConfig: FileUploadConfig = {
  maxFileSize: 50,
  allowedTypes: ["pdf", "jpg", "jpeg", "png", "docx", "xlsx", "pptx", "mp4"],
};

export const mockNotificationConfig: NotificationConfig = {
  notifyNewUser: true,
  notifyScheduleChange: true,
  notifyAnnouncement: false,
};

export const mockBrandConfig: BrandConfig = {
  logoUrl: "/logo.png",
  primaryColor: "#1a56db",
  schoolMotto: "博学笃行，求实创新",
};
