import 'package:json_annotation/json_annotation.dart'; 
  
part 'report_for_subject_student_model.g.dart';


@JsonSerializable(checked: true)
  class ReportForSubjectStudentModel extends Object {

  @JsonKey(name: 'BaseInfo')
  BaseInfo baseInfo;

  @JsonKey(name: 'ClassLevel')
  ClassLevel classLevel;

  @JsonKey(name: 'YearLevel')
  YearLevel yearLevel;

  @JsonKey(name: 'OverallLevel')
  OverallLevel overallLevel;

  @JsonKey(name: 'ScoreTrends')
  List<ScoreTrends> scoreTrends;

  @JsonKey(name: 'RankingTrends')
  List<RankingTrends> rankingTrends;

  @JsonKey(name: 'TagAnalysis')
  List<TagAnalysis> tagAnalysis;

  @JsonKey(name: 'KnowledgeAnalysisList')
  List<KnowledgeAnalysisList> knowledgeAnalysisList;

  @JsonKey(name: 'MethodAnalysisList')
  List<MethodAnalysisList> methodAnalysisList;

  @JsonKey(name: 'AnswerDetails')
  List<AnswerDetails> answerDetails;

  ReportForSubjectStudentModel(this.baseInfo,this.classLevel,this.yearLevel,this.overallLevel,this.scoreTrends,this.rankingTrends,this.tagAnalysis,this.knowledgeAnalysisList,this.methodAnalysisList,this.answerDetails,);

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

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

}

  
@JsonSerializable(checked: true)
  class BaseInfo extends Object {

  @JsonKey(name: 'Subject')
  Subject subject;

  @JsonKey(name: 'TotalScore')
  double totalScore;

  @JsonKey(name: 'Score')
  double score;

  @JsonKey(name: 'Rating')
  String rating;

  @JsonKey(name: 'StartTime')
  String startTime;

  BaseInfo(this.subject,this.totalScore,this.score,this.rating,this.startTime,);

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

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

}

  
@JsonSerializable(checked: true)
  class Subject extends Object {

  @JsonKey(name: 'SubjectId')
  int subjectId;

  @JsonKey(name: 'SubjectName')
  String subjectName;

  Subject(this.subjectId,this.subjectName,);

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

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

}

  
@JsonSerializable(checked: true)
  class ClassLevel extends Object {

  @JsonKey(name: 'Actor')
  int actor;

  @JsonKey(name: 'Ranking')
  int ranking;

  @JsonKey(name: 'Lack')
  int lack;

  @JsonKey(name: 'Exceed')
  String exceed;

  @JsonKey(name: 'Average')
  double average;

  @JsonKey(name: 'Max')
  double max;

  ClassLevel(this.actor,this.ranking,this.lack,this.exceed,this.average,this.max,);

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

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

}

  
@JsonSerializable(checked: true)
  class YearLevel extends Object {

  @JsonKey(name: 'Actor')
  int actor;

  @JsonKey(name: 'Ranking')
  int ranking;

  @JsonKey(name: 'Lack')
  int lack;

  @JsonKey(name: 'Exceed')
  String exceed;

  @JsonKey(name: 'Average')
  double average;

  @JsonKey(name: 'Max')
  double max;

  YearLevel(this.actor,this.ranking,this.lack,this.exceed,this.average,this.max,);

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

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

}

  
@JsonSerializable(checked: true)
  class OverallLevel extends Object {

  @JsonKey(name: 'Actor')
  int actor;

  @JsonKey(name: 'Ranking')
  int ranking;

  @JsonKey(name: 'Lack')
  int lack;

  @JsonKey(name: 'Exceed')
  String exceed;

  @JsonKey(name: 'Average')
  double average;

  @JsonKey(name: 'Max')
  double max;

  OverallLevel(this.actor,this.ranking,this.lack,this.exceed,this.average,this.max,);

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

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

}

  
@JsonSerializable(checked: true)
  class ScoreTrends extends Object {

  @JsonKey(name: 'ExamName')
  String examName;

  @JsonKey(name: 'ExamTime')
  String examTime;

  @JsonKey(name: 'UserScore')
  double userScore;

  @JsonKey(name: 'ClassScore')
  double classScore;

  @JsonKey(name: 'GradeScore')
  double gradeScore;

  @JsonKey(name: 'AllScore')
  double allScore;

  ScoreTrends(this.examName,this.examTime,this.userScore,this.classScore,this.gradeScore,this.allScore,);

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

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

}

  
@JsonSerializable(checked: true)
  class RankingTrends extends Object {

  @JsonKey(name: 'ClassRanking')
  double classRanking;

  @JsonKey(name: 'GradeRanking')
  double gradeRanking;

  @JsonKey(name: 'TotalRanking')
  double totalRanking;

  @JsonKey(name: 'ExamName')
  String examName;

  @JsonKey(name: 'ExamTime')
  String examTime;

  RankingTrends(this.classRanking,this.gradeRanking,this.totalRanking,this.examName,this.examTime,);

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

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

}

  
@JsonSerializable(checked: true)
  class TagAnalysis extends Object {

  @JsonKey(name: 'QuestionLevel')
  int questionLevel;

  @JsonKey(name: 'QuestionLevelTitle')
  String questionLevelTitle;

  @JsonKey(name: 'QuestionNums')
  String questionNums;

  @JsonKey(name: 'CorrectRate')
  String correctRate;

  @JsonKey(name: 'ScoringRate')
  String scoringRate;

  TagAnalysis(this.questionLevel,this.questionLevelTitle,this.questionNums,this.correctRate,this.scoringRate,);

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

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

}

  
@JsonSerializable(checked: true)
  class KnowledgeAnalysisList extends Object {

  @JsonKey(name: 'Questions')
  List<Questions> questions;

  @JsonKey(name: 'Name')
  String name;

  @JsonKey(name: 'Id')
  int id;

  @JsonKey(name: 'QuestionNums')
  String questionNums;

  @JsonKey(name: 'AllCorrectRate')
  String allCorrectRate;

  @JsonKey(name: 'ClassCorrectRate')
  String classCorrectRate;

  @JsonKey(name: 'GradeCorrectRate')
  String gradeCorrectRate;

  @JsonKey(name: 'UserCorrectRate')
  String userCorrectRate;

  KnowledgeAnalysisList(this.questions,this.name,this.id,this.questionNums,this.allCorrectRate,this.classCorrectRate,this.gradeCorrectRate,this.userCorrectRate,);

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

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

}

  
@JsonSerializable(checked: true)
  class Questions extends Object {

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

  @JsonKey(name: 'QuestionId')
  int questionId;

  Questions(this.questionNum,this.questionId,);

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

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

}

  
@JsonSerializable(checked: true)
  class MethodAnalysisList extends Object {

  @JsonKey(name: 'Questions')
  List<Questions> questions;

  @JsonKey(name: 'Name')
  String name;

  @JsonKey(name: 'Id')
  int id;

  @JsonKey(name: 'QuestionNums')
  String questionNums;

  @JsonKey(name: 'AllCorrectRate')
  String allCorrectRate;

  @JsonKey(name: 'ClassCorrectRate')
  String classCorrectRate;

  @JsonKey(name: 'GradeCorrectRate')
  String gradeCorrectRate;

  @JsonKey(name: 'UserCorrectRate')
  String userCorrectRate;

  MethodAnalysisList(this.questions,this.name,this.id,this.questionNums,this.allCorrectRate,this.classCorrectRate,this.gradeCorrectRate,this.userCorrectRate,);

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

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

}


  
@JsonSerializable(checked: true)
  class AnswerDetails extends Object {

  @JsonKey(name: 'No')
  String no;

  @JsonKey(name: 'Title')
  String title;

  @JsonKey(name: 'Type')
  String type;

  @JsonKey(name: 'Answer')
  String answer;

  @JsonKey(name: 'YouAnswer')
  String youAnswer;

  @JsonKey(name: 'QuestionId')
  int questionId;

  @JsonKey(name: 'AnswerParse')
  String answerParse;

  @JsonKey(name: 'QuestionChoiceOptions')
  List<QuestionChoiceOptions>? questionChoiceOptions;

  AnswerDetails(this.no,this.title,this.type,this.answer,this.youAnswer,this.questionId,this.answerParse,this.questionChoiceOptions,);

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

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

}

  
@JsonSerializable(checked: true)
  class QuestionChoiceOptions extends Object {

  @JsonKey(name: 'Id')
  int id;

  @JsonKey(name: 'QuestionId')
  int questionId;

  @JsonKey(name: 'OptionValue')
  String optionValue;

  @JsonKey(name: 'OptionContent')
  String optionContent;

  QuestionChoiceOptions(this.id,this.questionId,this.optionValue,this.optionContent,);

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

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

}

  
