import { OptionalScoreRule } 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;
  // 专业类型
  majorType: string;
  // 选做科目
  optional: boolean;
  // 试卷
  paperUrl: string;
  // 答案
  answerUrl: string;
  // 试卷类型
  paperType: string;
  // 卡格式
  cardFormatType: string;
  // 客观总分
  objectiveTotalScore: number;
  // 主观总分
  subjectiveTotalScore: number;
  // 试卷总分
  paperTotalScore: number;
  // 状态
  status: string;
}
export type SubjectListPageRes = PageResult<SubjectItem>;

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

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

// 试卷结构列表：试卷类型	大题名称	大题昵称	大题号	小题号	满分	给分次数 是否客观题	间隔分 题型	答案	判分策略	分组
export interface PaperStructureItem {
  id: number;
  // 试卷类型
  paperType: string;
  // 大题名称
  bigQuestionName: string;
  // 大题昵称
  bigQuestionNickname: string;
  // 大题号
  bigQuestionNo: number;
  // 小题号
  smallQuestionNo: number;
  // 满分
  fullScore: number;
  // 给分次数
  giveScoreCount: number;
  // 是否客观题
  isObjective: boolean;
  // 间隔分
  intervalScore: number;
  // 题型
  questionType: string;
  // 答案
  answer: string;
  // 判分策略
  scoringStrategy: string;
  // 分组
  grouping: string;
}
export type PaperStructureListPageRes = PaperStructureItem[];

export type PaperStructureUpdateParams = Partial<PaperStructureItem>;

// 选做题试题列表：大题名称	大题号	小题号	满分	间隔分	选做题分组	选做题区
export interface OptionalQuestionItem {
  id: number;
  // 大题名称
  bigQuestionName: string;
  // 大题号
  bigQuestionNo: number;
  // 小题号
  smallQuestionNo: number;
  // 大题昵称
  bigQuestionNickname: string;
  // 满分
  fullScore: number;
  // 间隔分
  intervalScore: number;
  // 选做题
  optional: boolean;
  // 选做题分组
  optionalQuestionGroup: string;
  // 选做题区
  optionalQuestionArea: string;
}

// 选做题规则列表：选做题组	规则	大题名称	分值
export interface OptionalRuleItem {
  id: number;
  subjectId: number;
  // 选做题规则: 几选几
  ruleSelecCount: number;
  ruleTotalCount: number;
  // 取分规则
  scoreRule: OptionalScoreRule;
  // 大题名称
  bigQuestionName: string;
  // 分值
  score: number;
  // 试题结构ids
  questionStructureIds: number[];
}

export interface OptionalRuleUpdateParam {
  id?: number;
  // 选做题规则: 几选几
  ruleSelecCount: number;
  ruleTotalCount: number;
  // 区分规则
  scoreRule: OptionalScoreRule;
  // 试题结构ids
  questionStructureIds: number[];
}
