import 'package:json_annotation/json_annotation.dart';

part 'marking_text_question_tab.g.dart';

@JsonSerializable()
class MarkingTextQuestionTab extends Object {
  @JsonKey(name: 'questionNum')
  String questionNum; // 批次题号

  @JsonKey(name: 'total')
  int total; // 当前批次试题总数(领取的任务数量)

  // @JsonKey(name: 'excessAvgCount')
  // int excessAvgCount; // 阅卷指标

  @JsonKey(name: 'finishCount')
  int finishCount; // 当前批次完成数量

  @JsonKey(name: 'isExcess')
  bool isExcess; // 是否是超量题

  @JsonKey(name: 'isFinished')
  bool isFinished; // 是否是超量题

  @JsonKey(name: 'scoreInterval')
  double? scoreInterval; // 自定义 ==》 当前TAG下对应步长

  // @JsonKey(name: 'agreementExcess')
  // bool? agreementExcess; // 自定义 ==》 是否同意批阅超量题

  // 进度条 完成百分比
  @JsonKey(name: 'percent')
  double percent;

  // @JsonKey(name: 'excessCountTotal')
  // int? excessCountTotal; // 前端自定义 ==》 超量题总数量

  MarkingTextQuestionTab({
    required this.questionNum,
    required this.total,
    required this.finishCount,
    // this.excessCount = 0,
    this.isExcess = false,
    // this.excessAvgCount = 0,
    this.scoreInterval,
    // this.agreementExcess,
    this.percent = 0.0,
    this.isFinished = false,
  }) {
    initGradingProgress();
  }

  void initGradingProgress() {
    try {
      /** 取消字段不需要判断位置了
      if (isExcess) {
        // 超量题
        dividendTotal = excessAvgCount; // 默认以指标数为被除数
        if (finishCount >= excessAvgCount) {
          percent = 1;
          return;
          /**
          // 完成数量大于指标
          if (agreementExcess == null || agreementExcess == false) {
            // 没有同意继续批阅的试题返回1
            percent = 1;
            return;
          }

          if (excessCount > 0) {
            // 题池中还有试题
            dividendTotal = total + excessCount; // 任务总量加题池剩余重量 作为被除数
          } else {
            // 题池中没有试题
            if (finishCount == total) {
              percent = 1;
              return;
            }
            dividendTotal = total;
          } */
        }
      } */
      // print('这里是数据：${finishCount};${dividendTotal}');
      percent = isFinished || (isExcess && finishCount >= total) ? 1 : finishCount / total;
      if (percent > 1) {
        percent = 1;
      }
      // TODO 这里数据"percent"可能返回大于1 需要埋点
    } catch (e) {
      percent = 0.0;
    }
  }

  setStepSize(double stepSize) => this.scoreInterval = stepSize;

  factory MarkingTextQuestionTab.fromJson(Map<String, dynamic> srcJson) => _$MarkingTextQuestionTabFromJson(srcJson);

  Map<String, dynamic> toJson() => _$MarkingTextQuestionTabToJson(this);
}
