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

// 质量监控
// 分组统计仲裁：科目 分组 任务总量 已完成 仲裁卷数 仲裁率 已完成仲裁 待处理仲裁
export interface GroupArbitrateStatItem {
  // 科目
  subjectCode: string;
  subjectName: string;
  // 分组
  groupNumber: string;
  groupName: string;
  groupText: string;
  // 任务总量
  totalCount: number;
  // 已完成
  finishCount: number;
  // 仲裁卷数
  arbitrateCount: number;
  // 仲裁率
  arbitrateRatio: number;
  // 已完成仲裁
  finishArbitrateCount: number;
  // 待处理仲裁
  waitArbitrateCount: number;
}
export type GroupArbitrateStatListRes = PageResult<GroupArbitrateStatItem>;
export interface GroupArbitrateStatFilter {
  // 科目
  subjectCode: string | null;
  // 分组
  group?: boolean;
}
export type GroupArbitrateStatListParam = PageParams<GroupArbitrateStatFilter>;

// 质量监控列表：分组	评卷员	姓名	完成任务数	仲裁任务数	仲裁率	打回次数	评卷采用率	评卷速度(秒)	平均分	标准差
export interface MarkQualityMonitorItem {
  // 分组
  groupNumber: string;
  groupName: string;
  groupText: string;
  // 评卷员
  markLogin: string;
  // 评卷员姓名
  markerName: string;
  // 完成任务数
  finishCount: number;
  // 仲裁任务数
  arbitrateCount: number;
  // 仲裁率
  arbitrateRatio: number;
  // 打回次数
  rejectCount: number;
  // 评卷采用率
  adoptionRate: number;
  // 评卷速度(秒)
  avgSpeed: number;
  // 平均分
  avgScore: number;
  // 标准差
  stdevScore: number;
}
export type MarkQualityMonitorListPageRes = PageResult<MarkQualityMonitorItem>;

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

// 给分曲线列表： 评卷员	姓名 给分
export interface QMScoreItem {
  // 评卷员
  markLogin: string;
  // 姓名
  markerName: string;
  // 给分
  scores: Array<{ score: number; count: number }>;
}

// 仲裁管理
// 仲裁管理列表：科目代码	分组序号	准考证号	状态	创建时间	处理时间	处理人
export interface MarkArbitrationItem {
  id: number;
  // 科目代码
  subjectCode: string;
  // 科目名称
  subjectName: string;
  // 分组序号
  groupNumber: number;
  // 准考证号
  examNumber: string;
  // 状态
  status: string;
  statusText: string;
  // 创建时间
  createTime: string;
  // 处理时间
  updateTime: string;
  // 处理人
  arbitrateName: string;
}
export type MarkArbitrationListPageRes = PageResult<MarkArbitrationItem>;
export interface MarkArbitrationListFilter {
  // 科目
  subjectCode: string | null;
  // 分组
  groupNumber?: string;
  // 状态
  status?: string;
  // 选做题，未选做
  unselective?: boolean;
  // 准考证号
  examNumber?: string;
}
export type MarkArbitrationListPageParam =
  PageParams<MarkArbitrationListFilter>;

// 任务管理
// 任务管理列表：科目代码	分组序号	准考证号	密号	状态	状态文本	处理时间	处理人	打回原因	评卷员	评卷总分	给分明细	评卷时间	复核人	复核时间
export interface MarkTaskItem {
  id: number;
  // 科目代码
  subjectCode: string;
  // 科目名称
  subjectName: string;
  // 分组序号
  groupNumber: number;
  // 准考证号
  examNumber: string;
  // 密号
  secretNumber: string;
  // 状态
  status: string;
  statusText: string;
  // 打回原因
  rejectReason: string;
  // 评卷员
  markerLoginName: string;
  // 评卷总分
  markerScore: number;
  // 给分明细
  markerScoreList: string;
  // 评卷时间
  markerTime: string;
  // 复核人
  headerLoginName: string;
  // 复核时间
  headerTime: string;
}
export type MarkTaskListPageRes = PageResult<MarkTaskItem>;
export interface MarkTaskListFilter {
  // 科目
  subjectCode: string | null;
  // 分组
  groupNumber?: string;
  // 状态
  status?: string;
  // 评卷员
  markerId?: number;
  // 选做题，未选做
  unselective?: boolean;
  // 准考证号
  examNumber?: string;
  // 密号
  secretNumber?: string;
  // 总分
  startScore?: number;
  endScore?: number;
  // 小题得分
  questionScore?: number;
}
export type MarkTaskListPageParam = PageParams<MarkTaskListFilter>;

// 任务打回或重置参数
export interface MarkRejectResetTaskParam {
  id: number;
  // 打回类型
  rejectType?: string;
  // 打回原因
  reason?: string;
  // 是否重置
  isRest?: boolean;
}

// 试评管理
// 试评管理列表：科目代码	分组序号	准考证号	密号	评卷员	评卷总分	给分明细	评卷时间
export interface MarkTrialItem {
  // 任务ID
  id: number;
  // 科目代码
  subjectCode: string;
  // 分组序号
  groupNumber: number;
  // 准考证号
  examNumber: string;
  // 密号
  secretNumber: string;
  // 评卷员
  markerLoginName: string;
  // 评卷总分
  markerScore: number;
  // 给分明细
  markerScoreList: string;
  // 评卷时间
  markerTime: string;
}
export type MarkTrialListPageRes = PageResult<MarkTrialItem>;
export interface MarkTrialListFilter {
  // 科目
  subjectCode: string | null;
  // 分组
  groupNumber?: string;
  // 准考证号
  examNumber?: string;
  // 密号
  secretNumber?: string;
}
export type MarkTrialListPageParam = PageParams<MarkTrialListFilter>;

// 评卷员管理
// 评卷员管理列表：登录名	姓名	科目	分组	状态	已评数量	正在评卷	任务数	绑定班级
export interface MarkMarkerItem {
  id: number;
  // 登录名
  loginName: string;
  // 姓名
  name: string;
  // 科目
  subjectCode: string;
  // 科目名称
  subjectName: string;
  // 分组序号
  groupNumber: string;
  // 状态
  status: string;
  // 已评数量
  markedCount: number;
  // 正在评卷
  currentCount: number;
  // 任务数
  topCount: number;
  // 绑定班级数量
  classCount: number;
}
export type MarkMarkerListPageRes = PageResult<MarkMarkerItem>;
export interface MarkMarkerListFilter {
  // 登录名
  loginName?: string;
  // 姓名
  name?: string;
  // 科目
  subjectCode?: string | null;
  // 分组
  groupNumber?: string;
  // 已评卷
  marked?: boolean;
}
export type MarkMarkerListPageParam = PageParams<MarkMarkerListFilter>;

// 分组管理
// 分组管理列表：分组序号	大题号	大题名称	步骤分	包含选做题	评卷员人数	任务总数	完成总数	剩余总数	正在评卷	进度	评卷区设置	状态
export interface MarkGroupItem {
  id: number;
  subjectCode: string;
  // 分组序号
  groupNumber: number;
  // 大题号
  mainNumber: string;
  // 大题名称
  title: string;
  // 步骤分
  scoreList: string;
  // 包含选做题
  selective: boolean;
  // 评卷员人数
  markerCount: number;
  // 任务总数
  libraryCount: number;
  // 完成总数
  markedCount: number;
  // 剩余总数
  leftCount: number;
  // 正在评卷
  currentCount: number;
  // 进度
  percent: number;
  // 评卷区设置
  picList: string;
  // 状态
  status: string;
}
export type MarkGroupListPageRes = MarkGroupItem[];
export interface MarkGroupListFilter {
  // 科目
  subjectCode: string | null;
}
export type MarkGroupListPageParam = PageParams<MarkGroupListFilter>;

export interface MarkGroupUpdateParams {
  // id
  id?: number;
  subjectCode: string;
  // 分组序号
  groupNumber: number;
  // 名称
  groupName: string;
  // 重置
  reset: boolean;
  // 题目
  questions: Array<{
    // 大题号
    mainNumber: string;
    // 小题号
    subNumber: string;
    // 间隔分
    intervalScore: number;
    // 仲裁阀值
    arbitrateThreshold?: number;
  }>;
  // 评卷图
  picList?: CoverArea[];
  // 双评
  openDouble: boolean;
  // 仲裁方式
  arbitrateType?: ArbitrationType;
  // 双评比例
  doubleRate?: number;
  // 仲裁阀值
  arbitrateThreshold?: number;
  // 合分策略
  scorePolicy?: CombineScoreStrategy;
  // 三评规则
  thirdPolicy?: ThreeEvaluationRule;
  // 授权码
  deleteCode?: string;
}

export interface MarkGroupResetParams {
  // 科目
  subjectCode: string;
  // 分组序号
  number: number;
  // 授权码
  deleteCode?: string;
}
export interface MarkGroupUpdateStatusParams {
  // 科目
  subjectCode: string;
  // 分组序号
  number: number;
  // 状态:TRIAL,FORMAL,FINISH
  status: GroupStatus;
}

// 评卷进度
// 评卷进度统计信息
export interface MarkStatInfo {
  // 任务已完成数
  markedCount: number;
  // 任务待完成数
  unMarkedCount: number;
  // 科目已完成数
  finishCount: number;
  // 科目待完成数
  unFinishCount: number;
}

// 评卷进度统计列表:科目	选做异常	上传人数	主观总分	分组总数	完成进度	待复核量
export interface MarkStatItem {
  // 科目名称
  subjectName: string;
  // 科目代码
  subjectCode: string;
  // 选做异常
  selectiveError: boolean;
  // 上传人数
  uploadCount: number;
  // 主观总分
  subjectiveScore: number;
  // 分组总数
  groupCount: number;
  // 完成进度
  percent: number;
  // 待复核量
  markedCount: number;
}
export type MarkStatListPageRes = PageResult<MarkStatItem>;
export interface MarkStatListFilter {
  // 科目
  subjectCode: string | null;
  // 完成状态
  finished?: boolean;
}
export type MarkStatListPageParam = PageParams<MarkStatListFilter>;
