import {
  CombineScoreStrategy,
  ArbitrationType,
  ThreeEvaluationRule,
} from '@/constants/enumerate';
import { PageResult, PageParams, CoverArea } from './common';

// 质量监控
// 质量监控列表：分组	评卷员	姓名	完成任务数	仲裁任务数	仲裁率	打回次数	评卷采用率	评卷速度(秒)	平均分	标准差
export interface MarkQualityMonitorItem {
  // 分组
  group: string;
  // 评卷员ID
  markerId: string;
  // 评卷员姓名
  name: string;
  // 完成任务数
  completedTasks: number;
  // 仲裁任务数
  arbitrationTasks: number;
  // 仲裁率
  arbitrationRate: number;
  // 打回次数
  returnCount: number;
  // 评卷采用率
  adoptionRate: number;
  // 评卷速度(秒)
  markingSpeed: number;
  // 平均分
  averageScore: number;
  // 标准差
  standardDeviation: number;
}
export type MarkQualityMonitorListPageRes = PageResult<MarkQualityMonitorItem>;

export interface MarkQualityMonitorListFilter {
  // 科目
  subject: string | null;
  // 分组
  group?: string;
  // 已评卷
  marked?: boolean;
  // 不含仲裁
  noArbitration?: boolean;
}
export type MarkQualityMonitorListPageParam =
  PageParams<MarkQualityMonitorListFilter>;

// 给分曲线列表： 评卷员	姓名 给分
export interface QMScoreItem {
  // 评卷员
  marker: string;
  // 姓名
  name: string;
  // 给分
  scores: Array<{ score: number; count: number }>;
}
export type QMScoreListParam = {
  // 科目
  subject: string | null;
  // 分组
  group: string;
};

// 仲裁管理
// 仲裁管理列表：科目代码	分组序号	准考证号	状态	创建时间	处理时间	处理人
export interface MarkArbitrationItem {
  id: number;
  // 科目代码
  subjectCode: string;
  // 分组序号
  groupNo: number;
  // 准考证号
  examCardNo: string;
  // 状态
  status: string;
  // 创建时间
  createTime: string;
  // 处理时间
  handleTime: string;
  // 处理人
  handler: string;
}
export type MarkArbitrationListPageRes = PageResult<MarkArbitrationItem>;
export interface MarkArbitrationListFilter {
  // 科目
  subject: string | null;
  // 分组
  group?: string;
  // 状态
  status?: string;
  // 选做题
  optional?: boolean;
  // 准考证号
  examCardNo?: string;
}
export type MarkArbitrationListPageParam =
  PageParams<MarkArbitrationListFilter>;

// 任务管理
// 任务管理列表：科目代码	分组序号	准考证号	密号	状态	打回原因	评卷员	评卷总分	给分明细	评卷时间	复核人	复核时间
export interface MarkTaskItem {
  // 任务ID
  id: number;
  // 科目代码
  subjectCode: string;
  // 分组序号
  groupNo: number;
  // 准考证号
  examCardNo: string;
  // 密号
  secretNo: string;
  // 状态
  status: string;
  // 打回原因
  returnReason: string;
  // 评卷员
  marker: string;
  // 评卷总分
  totalScore: number;
  // 给分明细
  giveScoreDetail: string;
  // 评卷时间
  markingTime: string;
  // 复核人
  reviewer: string;
  // 复核时间
  reviewTime: string;
}
export type MarkTaskListPageRes = PageResult<MarkTaskItem>;
export interface MarkTaskListFilter {
  // 科目
  subject: string | null;
  // 分组
  group?: string;
  // 状态
  status?: string;
  // 评卷员
  markerId?: number;
  // 选做题
  optional?: boolean;
  // 准考证号
  examCardNo?: string;
  // 密号
  secretNo?: string;
  // 总分
  totalStartScore?: number;
  totalEndScore?: number;
  // 小题得分
  smallQuestionScore?: number;
}
export type MarkTaskListPageParam = PageParams<MarkTaskListFilter>;

export interface MarkRejectTaskParam {
  id: number;
  // 打回类型
  rejectType: string;
  // 打回原因
  rejectReason: string;
}

// 试评管理
// 试评管理列表：科目代码	分组序号	准考证号	密号	评卷员	评卷总分	给分明细	评卷时间
export interface MarkTrialItem {
  // 任务ID
  id: number;
  // 科目代码
  subjectCode: string;
  // 分组序号
  groupNo: number;
  // 准考证号
  examCardNo: string;
  // 密号
  secretNo: string;
  // 评卷员
  marker: string;
  // 评卷总分
  totalScore: number;
  // 给分明细
  giveScoreDetail: string;
  // 评卷时间
  markingTime: string;
}
export type MarkTrialListPageRes = PageResult<MarkTrialItem>;
export interface MarkTrialListFilter {
  // 科目
  subject: string | null;
  // 分组
  group?: string;
  // 准考证号
  examCardNo?: string;
  // 密号
  secretNo?: string;
}
export type MarkTrialListPageParam = PageParams<MarkTrialListFilter>;

// 评卷员管理
// 评卷员管理列表：登录名	姓名	科目	分组	状态	已评数量	正在评卷	任务数	绑定班级
export interface MarkMarkerItem {
  id: number;
  // 登录名
  loginName: string;
  // 姓名
  name: string;
  // 科目
  subject: string;
  // 分组
  group: string;
  // 状态
  status: string;
  // 已评数量
  completedCount: number;
  // 正在评卷
  marking: boolean;
  // 任务数
  taskCount: number;
  // 绑定班级
  bindClass: string;
}
export type MarkMarkerListPageRes = PageResult<MarkMarkerItem>;
export interface MarkMarkerListFilter {
  // 登录名
  loginName?: string;
  // 姓名
  name?: string;
  // 科目
  subject: string | null;
  // 分组
  group?: string;
  // 已评卷
  marked?: boolean;
}
export type MarkMarkerListPageParam = PageParams<MarkMarkerListFilter>;

// 分组管理
// 分组管理列表：分组序号	大题号	大题名称	步骤分	包含选做题	评卷员人数	任务总数	完成总数	剩余总数	正在评卷	进度	评卷区设置	状态
export interface MarkGroupItem {
  id: number;
  // 分组序号
  groupNo: number;
  // 大题号
  questionNo: string;
  // 大题名称
  questionName: string;
  // 步骤分
  stepScore: number;
  // 包含选做题
  optional: boolean;
  // 评卷员人数
  markerCount: number;
  // 任务总数
  totalTaskCount: number;
  // 完成总数
  completedTaskCount: number;
  // 剩余总数
  remainingTaskCount: number;
  // 正在评卷
  marking: boolean;
  // 进度
  progress: number;
  // 评卷区设置
  markingAreaSetting: string;
  // 状态
  status: string;
}
export type MarkGroupListPageRes = MarkGroupItem[];
export interface MarkGroupListFilter {
  // 科目
  subject: string | null;
}
export type MarkGroupListPageParam = PageParams<MarkGroupListFilter>;

export interface MarkGroupUpdateParams {
  // id
  id?: number;
  subjectCode: string;
  // 分组序号
  groupNo: number;
  // 名称
  name: string;
  // 题目
  questions: Array<{
    // 大题号
    bigQuestionNo: string;
    // 小题号
    smallQuestionNo: string;
    // 间隔分
    intervalScore: number;
    // 仲裁阀值
    arbitrationThreshold?: number;
  }>;
  // 评卷图
  markingArea?: CoverArea[];
  // 双评
  doubleMarking: boolean;
  // 仲裁方式
  arbitrationType?: ArbitrationType;
  // 双评比例
  doubleMarkingRatio?: number;
  // 仲裁阀值
  arbitrationThreshold?: number;
  // 合分策略
  combinationStrategy?: CombineScoreStrategy;
  // 三评规则
  threeMarkingRule?: ThreeEvaluationRule;
}

// 评卷进度
// 评卷进度统计信息
export interface MarkStatInfo {
  // 任务已完成数
  taskFinishedCount: number;
  // 任务待完成数
  taskUnfinishedCount: number;
  // 科目已完成数
  courseFinishedCount: number;
  // 科目待完成数
  courseUnfinishedCount: number;
}

// 评卷进度统计列表:科目	选做异常	上传人数	主观总分	分组总数	完成进度	待复核量
export interface MarkStatItem {
  // 科目ID
  courseId: number;
  // 科目
  courseName: string;
  // 选做异常
  isOptionalException: boolean;
  // 上传人数
  uploadCount: number;
  // 主观总分
  subjectiveTotalScore: number;
  // 分组总数
  groupCount: number;
  // 完成进度
  progress: number;
  // 待复核量
  unReviewedCount: number;
}
export type MarkStatListPageRes = PageResult<MarkStatItem>;
export interface MarkStatListFilter {
  // 科目
  subject: string | null;
  // 完成进度
  progress?: string;
}
export type MarkStatListPageParam = PageParams<MarkStatListFilter>;
