// import 'package:json_annotation/json_annotation.dart';
// import 'package:marking_app/common/model/enum/KeyboardType.dart';

// part 'do_marking_keyboard_model.g.dart';

// // 键盘操作模型
// @JsonSerializable()
// class DoMarkingKeyboardModel extends Object {
//   // 当前选中键盘
//   KeyboardType keyboard;

//   // 屏幕方向
//   ScreenDirection screenDirection;

//   // 引导页展示
//   bool guidePageDisplay;

//   // 是否关闭键盘
//   bool open;

//   // 自动提交并前往下一题 （输入型键盘无法自动提交只回自动前往下一题）
//   bool autoSubmitToNextQuestion;

//   // 键盘排序方式（输入型键盘为，无排序规则）
//   SortKeyboard? sort;

//   // 阅卷分值步长集合（每个试卷 每种试题分值间隔不同） key:试卷号-题号  val:分值步长
//   Map<String, double>? scoreIntervalMap;

//   // 是否有辅助键盘
//   bool auxiliaryKeyboard;

//   // 打开辅助键盘
//   bool openAuxiliary;

//   // 是否隐藏试题ID
//   bool hideQuestionId;

//   // 常用打分项
//   @JsonKey(name: 'commonScores', fromJson: MarkingCommonScoreItems.fromJson, includeIfNull: false)
//   MarkingCommonScoreItems? commonScores;

//   // 默认输入型键盘
//   DoMarkingKeyboardModel({
//     this.hideQuestionId = false,
//     this.screenDirection = ScreenDirection.HORIZONTAL_SCREEN,
//     this.openAuxiliary = true,
//     this.auxiliaryKeyboard = true,
//     this.keyboard = KeyboardType.RIGHT_SELECTION,
//     this.guidePageDisplay = true,
//     this.open = true,
//     this.autoSubmitToNextQuestion = true,
//     this.sort = SortKeyboard.FULL_AND_AERO_TOP,
//     this.scoreIntervalMap,
//     this.commonScores,
//   }) {
//     if (keyboard == KeyboardType.INPUT_TYPE) {
//       // 输入型键盘无排序规则
//       sort = null;
//     } else {
//       sort ??= SortKeyboard.FULL_AND_AERO_TOP;
//     }
//     if (keyboard == KeyboardType.BOTTOM_SELECTION) {
//       auxiliaryKeyboard = false;
//     }
//     if (keyboard == KeyboardType.RIGHT_SELECTION) {
//       open = true;
//     }
//   }
//   factory DoMarkingKeyboardModel.fromJson(Map<String, dynamic> srcJson) => _$DoMarkingKeyboardModelFromJson(srcJson);
//   Map<String, dynamic> toJson() => _$DoMarkingKeyboardModelToJson(this);

//   /// 设置步长
//   /// @param {int} markingUserId 当场考试任务ID
//   /// @param {String} questionNum  题号
//   /// @param {double?} val 步长值(val为null就清空当前步长,非null和0就是设置步长)
//   void setScoreStepSize(int markingUserId, String questionNum, double defaultNum, double val) {
//     if (val == defaultNum) return;
//     String theKey = '$markingUserId-$questionNum';
//     // val = val==0?null:val;
//     // if(val==null){
//     //   // 清空
//     //   scoreIntervalMap!.remove(theKey);
//     // }else{
//     //   // 设置值
//     //   scoreIntervalMap ??= {};
//     //   scoreIntervalMap!['$markingUserId-$questionNum'] = val;
//     // }
//     // 设置值
//     scoreIntervalMap ??= {};
//     scoreIntervalMap!['$markingUserId-$questionNum'] = val;
//   }

//   /// 或者试题步长
//   /// @param {int} markingUserId 试卷ID
//   /// @param {String} questionNum  题号
//   /// return 没有设置就返回0，设置了返回对应的值
//   double getScoreStepSize(int markingUserId, String questionNum, double defaultNum) {
//     double? val = scoreIntervalMap?['$markingUserId-$questionNum'];
//     return val ?? defaultNum;
//   }
// }

// @JsonSerializable(includeIfNull: false)
// class MarkingCommonScoreItems extends Object {
//   @JsonKey(name: 'id')
//   int id;

//   @JsonKey(name: 'questionNum')
//   String questionNum;

//   @JsonKey(name: 'score')
//   List<double> score;

//   MarkingCommonScoreItems({
//     required this.id,
//     required this.questionNum,
//     required this.score,
//   });

//   factory MarkingCommonScoreItems.fromJson(Map<String, dynamic> srcJson) => _$MarkingCommonScoreItemsFromJson(srcJson);

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

import 'package:json_annotation/json_annotation.dart';
import 'package:marking_app/common/model/enum/KeyboardType.dart';
import 'package:marking_app/common/model/marking/marking_common_score_items.dart';

part 'do_marking_keyboard_model.g.dart';

// 键盘操作模型
@JsonSerializable(includeIfNull: false, explicitToJson: true, checked: true)
class DoMarkingKeyboardModel extends Object {
  // 当前选中键盘
  KeyboardType keyboard;

  // 屏幕方向
  ScreenDirection screenDirection;

  // 引导页展示
  bool guidePageDisplay;

  // 是否关闭键盘
  bool open;

  // 自动提交并前往下一题 （输入型键盘无法自动提交只回自动前往下一题）
  bool autoSubmitToNextQuestion;

  // 键盘排序方式（输入型键盘为，无排序规则）
  SortKeyboard? sort;

  // 阅卷分值步长集合（每个试卷 每种试题分值间隔不同） key:试卷号-题号  val:分值步长
  Map<String, double>? scoreIntervalMap;

  // 是否有辅助键盘
  bool auxiliaryKeyboard;

  // 打开辅助键盘
  bool openAuxiliary;

  // 是否隐藏试题ID
  bool hideQuestionId;

  // 常用打分项
  @JsonKey(name: 'commonScores', includeIfNull: false)
  MarkingCommonScoreItems? commonScores;

  // 默认输入型键盘
  DoMarkingKeyboardModel({
    this.hideQuestionId = false,
    this.screenDirection = ScreenDirection.HORIZONTAL_SCREEN,
    this.openAuxiliary = true,
    this.auxiliaryKeyboard = true,
    this.keyboard = KeyboardType.RIGHT_SELECTION,
    this.guidePageDisplay = true,
    this.open = true,
    this.autoSubmitToNextQuestion = true,
    this.sort = SortKeyboard.FULL_AND_AERO_TOP,
    this.scoreIntervalMap,
    this.commonScores,
  }) {
    if (keyboard == KeyboardType.INPUT_TYPE) {
      // 输入型键盘无排序规则
      sort = null;
    } else {
      sort ??= SortKeyboard.FULL_AND_AERO_TOP;
    }
    if (keyboard == KeyboardType.BOTTOM_SELECTION) {
      auxiliaryKeyboard = false;
    }
    if (keyboard == KeyboardType.RIGHT_SELECTION) {
      open = true;
    }
  }
  factory DoMarkingKeyboardModel.fromJson(Map<String, dynamic> srcJson) => _$DoMarkingKeyboardModelFromJson(srcJson);
  Map<String, dynamic> toJson() => _$DoMarkingKeyboardModelToJson(this);

  /// 设置步长
  /// @param {int} markingUserId 当场考试任务ID
  /// @param {String} questionNum  题号
  /// @param {double?} val 步长值(val为null就清空当前步长,非null和0就是设置步长)
  void setScoreStepSize(int markingUserId, String questionNum, double defaultNum, double val) {
    if (val == defaultNum) return;
    String theKey = '$markingUserId-$questionNum';
    // val = val==0?null:val;
    // if(val==null){
    //   // 清空
    //   scoreIntervalMap!.remove(theKey);
    // }else{
    //   // 设置值
    //   scoreIntervalMap ??= {};
    //   scoreIntervalMap!['$markingUserId-$questionNum'] = val;
    // }
    // 设置值
    scoreIntervalMap ??= {};
    scoreIntervalMap!['$markingUserId-$questionNum'] = val;
  }

  /// 或者试题步长
  /// @param {int} markingUserId 试卷ID
  /// @param {String} questionNum  题号
  /// return 没有设置就返回0，设置了返回对应的值
  double getScoreStepSize(int markingUserId, String questionNum, double defaultNum) {
    double? val = scoreIntervalMap?['$markingUserId-$questionNum'];
    return val ?? defaultNum;
  }
}
