import type { VxeGridProps } from '#/adapter/vxe-table';
import type { FormSchemaGetter } from '#/adapter/form';

// 待考试数据结构
export interface PendingExamData {
  id: number;
  examName: string; // 考试名称
  examStartTime: string; // 考试开始时间
  examEndTime: string; // 考试结束时间
  passingScore: number; // 及格分数
  fullScore: number; // 满分
  examDuration: number; // 考试时长（分钟）
}

// 已考试数据结构
export interface CompletedExamData {
  id: number;
  examName: string; // 考试名称
  examStartTime: string; // 考试开始时间
  examEndTime: string; // 考试结束时间
  startTime: string; // 开始答题时间
  duration: number; // 答题时长（分钟）
  score: number; // 得分
  isPass: boolean; // 是否及格
  corrector: string; // 批改人
}

// 生成随机日期
const generateRandomDate = (startDate: Date, endDate: Date): string => {
  const randomTime = startDate.getTime() + Math.random() * (endDate.getTime() - startDate.getTime());
  const date = new Date(randomTime);
  return date.toISOString().slice(0, 19).replace('T', ' ');
};

// 待考试表格列配置
export const pendingExamColumns: VxeGridProps['columns'] = [
  { title: '考试名称', field: 'examName', minWidth: 200, align: 'center', fixed: 'left' },
  { title: '考试开始时间', field: 'examStartTime', minWidth: 180, align: 'center' },
  { title: '考试结束时间', field: 'examEndTime', minWidth: 180, align: 'center' },
  { title: '及格分数', field: 'passingScore', minWidth: 100, align: 'center' },
  { title: '满分', field: 'fullScore', minWidth: 100, align: 'center' },
  { title: '考试时间长(分钟)', field: 'examDuration', minWidth: 120, align: 'center' },
  { 
    title: '操作', 
    field: 'action', 
    minWidth: 120, 
    align: 'center', 
    fixed: 'right',
    slots: {
      default: 'actionSlot'
    }
  }
];

// 已考试表格列配置
export const completedExamColumns: VxeGridProps['columns'] = [
  { title: '考试名称', field: 'examName', minWidth: 200, align: 'center', fixed: 'left' },
  { title: '考试开始时间', field: 'examStartTime', minWidth: 180, align: 'center' },
  { title: '考试结束时间', field: 'examEndTime', minWidth: 180, align: 'center' },
  { title: '开始答题时间', field: 'startTime', minWidth: 180, align: 'center' },
  { title: '答题时长(分钟)', field: 'duration', minWidth: 120, align: 'center' },
  { title: '得分', field: 'score', minWidth: 100, align: 'center' },
  { 
    title: '是否及格', 
    field: 'isPass', 
    minWidth: 100, 
    align: 'center',
    formatter: ({ cellValue }) => {
      return cellValue ? '是' : '否';
    }
  },
  { title: '批改人', field: 'corrector', minWidth: 120, align: 'center' },
  { 
    title: '操作', 
    field: 'action', 
    minWidth: 120, 
    align: 'center', 
    fixed: 'right',
    slots: {
      default: 'actionSlot'
    }
  }
];

// 搜索表单配置 (待考试和已考试共用)
export const examQueryFormSchema: FormSchemaGetter = () => [
  {
    component: 'Input',
    fieldName: 'examName',
    label: '考试内容',
    componentProps: {
      placeholder: '请输入考试名称',
    },
  },
];

// 生成随机考试名称
const generateRandomExamName = () => {
  const examTypes = ['安全知识', '操作技能', '规章制度', '专业理论', '应急处理'];
  const departments = ['财务部', '运营部', '技术部', '人力资源部', '安全部'];
  const randomType = examTypes[Math.floor(Math.random() * examTypes.length)];
  const randomDept = departments[Math.floor(Math.random() * departments.length)];
  return `${randomType}${randomDept}考试`;
};

// 生成随机人员姓名
const generateRandomName = () => {
  const surnames = ['张', '王', '李', '赵', '陈', '刘', '杨', '黄', '周', '吴'];
  const givenNames = ['明', '芳', '军', '华', '强', '伟', '丽', '敏', '静', '勇'];
  const randomSurname = surnames[Math.floor(Math.random() * surnames.length)];
  const randomGivenName = givenNames[Math.floor(Math.random() * givenNames.length)];
  return `${randomSurname}${randomGivenName}`;
};

// 待考试模拟数据
export const PENDING_EXAM_MOCK_DATA: PendingExamData[] = Array.from({ length: 15 }, (_, index) => {
  const id = index + 1;
  const fullScore = 100;
  const passingScore = Math.floor(fullScore * 0.6); // 及格分数为满分的60%
  const examDuration = Math.floor(Math.random() * 120) + 60; // 考试时长60-180分钟
  
  // 生成考试时间范围
  const now = new Date();
  const examStartTime = generateRandomDate(now, new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000)); // 未来7天内
  const examEndTime = new Date(new Date(examStartTime).getTime() + 2 * 24 * 60 * 60 * 1000); // 考试持续2天
  
  return {
    id,
    examName: generateRandomExamName(),
    examStartTime,
    examEndTime: examEndTime.toISOString().slice(0, 19).replace('T', ' '),
    passingScore,
    fullScore,
    examDuration
  };
});

// 已考试模拟数据
export const COMPLETED_EXAM_MOCK_DATA: CompletedExamData[] = Array.from({ length: 20 }, (_, index) => {
  const id = index + 1;
  const examName = generateRandomExamName();
  const fullScore = 100;
  
  // 生成考试时间范围
  const now = new Date();
  const examStartTime = generateRandomDate(new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000), now); // 过去30天内
  const examEndTime = new Date(new Date(examStartTime).getTime() + 2 * 24 * 60 * 60 * 1000); // 考试持续2天
  
  // 生成答题时间
  const startTime = generateRandomDate(new Date(examStartTime), new Date(examEndTime));
  const duration = Math.floor(Math.random() * 120) + 30; // 答题时长30-150分钟
  
  // 生成得分
  const score = Math.floor(Math.random() * 100) + 1;
  const isPass = score >= 60; // 60分及格
  
  return {
    id,
    examName,
    examStartTime,
    examEndTime: examEndTime.toISOString().slice(0, 19).replace('T', ' '),
    startTime,
    duration,
    score,
    isPass,
    corrector: generateRandomName()
  };
});
