completeSet method

Future<void> completeSet({
  1. required int exerciseIndex,
  2. required int setIndex,
  3. required double weight,
  4. required int reps,
  5. required int rir,
  6. Duration? setDuration,
  7. Duration? pauseDuration,
})

Implementation

Future<void> completeSet({
  required int exerciseIndex,
  required int setIndex,
  required double weight,
  required int reps,
  required int rir,
  Duration? setDuration,
  Duration? pauseDuration, //Fehlt noch,
}) async {
  if (_state == null || _plan == null) return;

  final currentEx = _plan!.exercises[exerciseIndex];

  final newSet = PerformedSet(
    exerciseIndex: exerciseIndex,
    setIndex: setIndex,
    actualWeight: weight,
    actualReps: reps,
    rir: rir,
    pause: pauseDuration,
    duration: setDuration,
    completedAt: DateTime.now(),
  );

  final existingExercise = _state!.performed.firstWhere(
    (e) => e.exerciseIndex == exerciseIndex,
    orElse:
        () => PerformedExercise(
          exerciseIndex: exerciseIndex,
          exerciseName: currentEx.name,
          sets: const [],
        ),
  );

  final updatedSets = [
    // falls schon einer mit gleichem setIndex vorhanden ist, behalten (kein Duplikat)
    for (final s in existingExercise.sets) s,
    if (!existingExercise.sets.any((s) => s.setIndex == setIndex)) newSet,
  ];

  final updatedExercise = PerformedExercise(
    exerciseIndex: existingExercise.exerciseIndex,
    exerciseName:
        existingExercise.exerciseName.isEmpty
            ? currentEx.name
            : existingExercise.exerciseName,
    sets: updatedSets,
  );

  final updatedPerformed = [
    for (final e in _state!.performed)
      if (e.exerciseIndex == exerciseIndex) updatedExercise else e,
    if (!_state!.performed.any((e) => e.exerciseIndex == exerciseIndex))
      updatedExercise,
  ];

  _state = _state!.copyWith(
    performed: updatedPerformed,
    setIndex: setIndex + 1,
    updatedAt: DateTime.now(),
  );

  await _persist();
  notifyListeners();
}