import {
  OptionalScorePolicy,
  ObjectiveQuestionType,
  ObjectivePolicy,
} from '@/constants/enumerate';
import { PageResult, PageParams, CoverArea } from './common';

export interface SubjectTotalScoreStatItem {
  // 总分
  totalScore: number;
  // 数量
  count: number;
}

// 科目列表： 科目名称	层次	专业类型	选做科目	试卷	答案	试卷类型	卡格式	客观总分	主观总分	试卷总分	状态
export interface SubjectItem {
  id: number;
  // 科目名称
  name: string;
  // 科目代码
  code: string;
  // 层次
  level: string;
  // 专业类型
  category: string;
  // 选做科目
  selective: boolean;
  // 试卷
  paperUrl: string;
  // 答案
  answerUrl: string;
  // 试卷类型
  paperType: string;
  // 卡格式: JSON:电子题卡,ZIP:扫描题卡
  cardType: 'ZIP' | 'JSON';
  // 客观总分
  objectiveScore: number;
  // 主观总分
  subjectiveScore: number;
  // 试卷总分
  totalScore: number;
  // 状态
  locked: boolean;
  // 备注
  remark: string;
}
export type SubjectListPageRes = PageResult<SubjectItem>;

export interface SubjectListFilter {
  // 科目
  code?: string | null;
  // 层次
  level?: string;
  // 专业类型
  category?: string;
  // 选做科目
  selective?: boolean;
  // 状态
  status: string;
  // 总分
  totalScore?: number;
}
export type SubjectListPageParam = PageParams<SubjectListFilter>;

// 科目设置信息
export interface SubjectSettingInfo {
  id: number;
  // 科目名称
  name: string;
  // 科目代码
  code: string;
  // 评卷显示题目昵称
  displayQuestionName: boolean;
  // 及格分
  passScore: number;
  // 优秀分
  excellentScore: number;
  // 原图遮盖
  sheetConfig: CoverArea[] | null;
  // 评卷提交自动定位
  autoScroll: boolean;
  // 自动对切题卡
  enableSplit: boolean;
}

// 试卷结构列表：试卷类型	大题名称	大题昵称	大题号	小题号	满分	给分次数 是否客观题	间隔分 题型	答案	判分策略	分组
export interface PaperStructureItem {
  id: number;
  // 试卷类型
  paperType: string;
  // 大题名称
  mainTitle: string;
  // 大题昵称
  name: string;
  // 大题号
  mainNumber: number;
  // 小题号
  subNumber: number;
  // 满分
  totalScore: number;
  // 给分次数
  trackCount: number;
  // 是否客观题
  objective: boolean;
  // 间隔分
  intervalScore: number;
  // 题型
  type: ObjectiveQuestionType;
  // 答案
  answer: string;
  // 判分策略
  objectivePolicy: ObjectivePolicy;
  // 分组
  groupNumber: number;
}
export type PaperStructureListPageRes = PaperStructureItem[];

export type PaperStructureUpdateParams = Partial<PaperStructureItem>;

// 选做题试题列表：大题名称	大题号	小题号	满分	间隔分	选做题分组	选做题区
export interface OptionalQuestionItem {
  id: number;
  // 大题名称
  mainTitle: string;
  // 大题号
  mainNumber: number;
  // 小题号
  subNumber: number;
  // 大题昵称
  name: string;
  // 满分
  totalScore: number;
  // 间隔分
  intervalScore: number;
  // 选做题
  selective: boolean;
  // 选做题分组
  selectiveIndex: string;
  // 选做题区
  selectivePart: string;
  // 选做题取分规则
  scorePolicy: OptionalScorePolicy;
}

// 选做题规则列表：选做题组	规则	大题名称	分值
export interface OptionalRuleItem {
  id: number;
  subjectCode: string;
  // 选做题规则: 几选几
  selectivePart: number;
  selectiveCount: number;
  // 取分规则
  scorePolicy: OptionalScorePolicy;
  // 大题名称
  title: string;
  // 分值
  partScore: number;
  // 试题结构ids
  questionStructureIds: number[];
}

export interface OptionalRulePart {
  selectivePart: string;
  // selectivePart: '${selectivePartNo}';
  mainNumbers: number[];
}

export interface OptionalRuleUpdateParam {
  id?: number;
  // 选做题规则: 几选几
  selectivePart: number;
  selectiveCount: number;
  // 取分规则
  scorePolicy: OptionalScorePolicy;
  // 结构
  parts: OptionalRulePart[];
}
