import { ExamType, MarkingMode, ExamStatus } from '@/constants/enumerate';
import { PageResult, PageParams, CoverArea } from './common';

export interface ExamBaseItem {
  id: number;
  // 考试名称
  name: string;
  // 类型
  type: ExamType;
  // 考试日期
  examTime: string;
  // 评卷开始日期
  startTime: string;
  // 评卷结束日期
  endTime: string;
  // 评卷模式
  markMode: MarkingMode;
  // 强制标记
  forceSpecialTag: boolean;
  // 禁止其他人查看考生信息
  forbiddenInfo: boolean;
  // 禁止科组长成绩查询
  forbiddenScore: boolean;
  // 全卷多次复核不能同一账号
  inspectUnrepeated: boolean;
  // 全卷复核强制试卷拉到底部
  inspectScrollBottom: boolean;
  // 全卷复核进度100%时才能再次复核
  inspectRoundLimit: boolean;
  // 评卷端是否显示客观分
  showObjectiveScore: boolean;
  // 原图遮盖
  sheetConfig?: CoverArea[];
  // 打回后显示原分值
  showReject: boolean;
  // 回评卷数
  remarkCount: number;
  // 及格分
  passScore: number;
  // 优秀分
  excellentScore: number;
  // 原卷显示
  sheetView: boolean;
  // 评卷提交自动定位
  autoScroll: boolean;
  // 自动对切题卡
  enableSplit: boolean;
  // 描述
  description: string;
  // 状态
  status: 'START' | 'FINISH';
  // 创建时间
  createTime: string;
}

// 高级配置
export interface ExamAdvancedConfig {
  // 评卷时强制试卷拉到底部
  markScrollBottom: boolean;
  // 最小阅卷时长(秒)
  minMarkDuration: number | undefined;
  // 单卷回评次数
  reMarkLimitCount: number | undefined;
  // 给分次数限制类型：等于 小于等于
  trackCountPolicy: 'EQ' | 'LE' | null;
  // 启用条码粘贴AI检测
  barcodeAiCheck: boolean;
  // 启用题卡作答AI检测
  answerAiCheck: boolean;
}

export type ExamItem = ExamBaseItem & ExamAdvancedConfig;

export type ExamQueryItem = Pick<
  ExamBaseItem,
  | 'id'
  | 'name'
  | 'type'
  | 'examTime'
  | 'startTime'
  | 'endTime'
  | 'status'
  | 'markMode'
  | 'forceSpecialTag'
>;

export type ExamListPageRes = PageResult<ExamQueryItem>;

export interface ExamListFilter {
  // 考试名称
  name?: string;
  // 类型
  type?: ExamType;
  // 状态
  status?: ExamStatus;
}
export type ExamListPageParam = PageParams<ExamListFilter>;

// 基础配置
export type ExamUpdateParam = Omit<ExamItem, 'id' | 'createTime'>;

// 统计详情
export interface ExamStatDetailInfo {
  // 考生数量
  studentCount: number;
  // 科目数量
  subjectCount: number;
  // 扫描进度
  scanCount: number;
  // 扫描张数量
  paperCount: number;
  // 评卷进度
  markedCount: number;
}
