import 'package:workouttest_util/model/cache.dart'; import 'package:workouttest_util/model/exercise.dart'; import 'package:workouttest_util/model/exercise_plan_detail.dart'; import 'package:workouttest_util/model/exercise_type.dart'; import 'package:workouttest_util/repository/training_plan_day_repository.dart'; import 'package:workouttest_util/util/logging.dart'; class CustomerTrainingPlanDetails with Logging { /// customerTrainingPlanDetails int? customerTrainingPlanDetailsId; /// trainingPlanDetailsId int? trainingPlanDetailsId; /// exerciseTypeId int? exerciseTypeId; /// set int? set; /// repeats int? repeats; /// weight double? weight; int? restingTime; bool? parallel; String? day; int? dayId; /// exerciseType ExerciseType? exerciseType; ExercisePlanDetailState state = ExercisePlanDetailState.start; List exercises = []; bool isTest = false; double baseOneRepMax = -1; List alternatives = []; CustomerTrainingPlanDetails(); CustomerTrainingPlanDetails.fromJson(Map json) { customerTrainingPlanDetailsId = json['customerTrainingPlanDetailsId']; exerciseTypeId = json['exerciseTypeId']; set = json['set']; repeats = json['repeats']; weight = json['weight']; restingTime = json['restingTime']; parallel = json['parallel']; day = json['day']; } CustomerTrainingPlanDetails.fromJsonWithExerciseList(Map json) { customerTrainingPlanDetailsId = json['customerTrainingPlanDetailsId'] == "null" || json['customerTrainingPlanDetailsId'] == null ? 0 : json['customerTrainingPlanDetailsId']; trainingPlanDetailsId = json['trainingPlanDetailsId'] == "null" ? 0 : json['trainingPlanDetailsId']; exerciseTypeId = json['exerciseTypeId']; set = json['set']; repeats = json['repeats'] == "null" ? -1 : json['repeats']; weight = json['weight'] == "null" ? 0 : json['weight']; restingTime = json['restingTime']; parallel = json['parallel'] == "false" ? false : json['parallel'] == "true" ? true : null; dayId = json['dayId'] == "null" ? null : json['dayId']; TrainingPlanDayRepository trainingPlanDayRepository = const TrainingPlanDayRepository(); day = trainingPlanDayRepository.getNameById(dayId); try { Iterable iterable = json['exercises']; exercises = iterable.map((exercise) => Exercise.fromJson(exercise)).toList(); } on Exception catch (e) { log("JsonDecode error $e"); } if (json['state'] == ExercisePlanDetailState.finished.toStr()) { state = ExercisePlanDetailState.finished; } else if (json['state'] == ExercisePlanDetailState.inProgress.toStr()) { state = ExercisePlanDetailState.inProgress; } else if (json['state'] == ExercisePlanDetailState.skipped.toStr()) { state = ExercisePlanDetailState.skipped; } else { state = ExercisePlanDetailState.start; } isTest = json['isTest'] == "true" ? true : false; exerciseType = Cache().getExerciseTypeById(exerciseTypeId!); baseOneRepMax = json['baseOneRepMax'] ?? 0; } ExerciseType? getExerciseType() => exerciseType; Map toJson() => { "customerTrainingPlanDetailsId": customerTrainingPlanDetailsId, "exerciseTypeId": exerciseTypeId, "set": set, "repeats": repeats, "weight": weight, "restingTime": restingTime, "parallel": parallel, "day": day ?? '1.', }; Map toJsonWithExercises() { final Map jsonMap = { "customerTrainingPlanDetailsId": customerTrainingPlanDetailsId, "trainingPlanDetailsId": trainingPlanDetailsId, "exerciseTypeId": exerciseTypeId, "set": set, "repeats": repeats, "weight": weight, "restingTime": restingTime, "parallel": parallel, 'exercises': exercises.isEmpty ? [].toString() : exercises.map((exercise) => exercise.toJson()).toList().toString(), 'state': state.toStr(), "isTest": isTest, "dayId": dayId, "baseOneRepMax": baseOneRepMax, }; //print("Detail toJson $jsonMap"); return jsonMap; } @override String toString() => toJsonWithExercises().toString(); void copy(CustomerTrainingPlanDetails from) { customerTrainingPlanDetailsId = from.customerTrainingPlanDetailsId; trainingPlanDetailsId = from.trainingPlanDetailsId; exerciseTypeId = from.exerciseTypeId; exerciseType = from.exerciseType; set = from.set; repeats = from.repeats; weight = from.weight; restingTime = from.restingTime; parallel = from.parallel; exercises = from.exercises; state = from.state; isTest = from.isTest; day = from.day; dayId = from.dayId; baseOneRepMax = from.baseOneRepMax; if (from.exercises.isEmpty) { exercises = []; } if (from.alternatives.isNotEmpty) { for (var alternative in from.alternatives) { alternatives.add(alternative); } } } }