159 lines
4.6 KiB
Swift
159 lines
4.6 KiB
Swift
//
|
|
// CurrentWorkoutInfo.swift
|
|
// Werkout_ios
|
|
//
|
|
// Created by Trey Tartt on 7/17/23.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
class CurrentWorkoutInfo {
|
|
var supersetIndex: Int = 0
|
|
var exerciseIndex: Int = -1
|
|
var workout: Workout?
|
|
|
|
var currentRound = 1
|
|
var allSupersetExecerciseIndex = 0
|
|
|
|
var superset: [Superset] {
|
|
return workout?.supersets?.sorted(by: { $0.order < $1.order }) ?? [Superset]()
|
|
}
|
|
|
|
var numberOfRoundsInCurrentSuperSet: Int {
|
|
let supersets = superset
|
|
guard supersets.isEmpty == false else { return -1 }
|
|
|
|
if supersetIndex >= supersets.count {
|
|
return -1
|
|
}
|
|
let currentSuperSet = supersets[supersetIndex]
|
|
|
|
if exerciseIndex >= currentSuperSet.exercises.count {
|
|
return -1
|
|
}
|
|
|
|
return currentSuperSet.rounds
|
|
}
|
|
|
|
var currentExercise: SupersetExercise? {
|
|
let supersets = superset
|
|
guard supersets.isEmpty == false else { return nil }
|
|
|
|
if supersetIndex >= supersets.count { return nil }
|
|
let superset = supersets[supersetIndex]
|
|
|
|
// will be -1 for a moment while going to previous workout / superset
|
|
if exerciseIndex < 0 { return nil }
|
|
if exerciseIndex >= superset.exercises.count { return nil }
|
|
let exercise = superset.exercises[exerciseIndex]
|
|
return exercise
|
|
}
|
|
|
|
var allSupersetExecercise: SupersetExercise? {
|
|
let obj = workout?.allSupersetExecercise?[allSupersetExecerciseIndex]
|
|
return obj
|
|
}
|
|
|
|
// this is setting nothing so we can half ass it
|
|
var nextExerciseInfo: SupersetExercise? {
|
|
guard let workout = workout else { return nil }
|
|
|
|
let _exerciseIndex = allSupersetExecerciseIndex + 1
|
|
if _exerciseIndex >= workout.allSupersetExecercise?.count ?? -1 {
|
|
return nil
|
|
}
|
|
return workout.allSupersetExecercise?[_exerciseIndex]
|
|
}
|
|
|
|
// this needs to set stuff for iphone
|
|
var goToNextExercise: SupersetExercise? {
|
|
let supersets = superset
|
|
guard supersets.isEmpty == false else { return nil }
|
|
|
|
exerciseIndex += 1
|
|
let currentSuperSet = supersets[supersetIndex]
|
|
|
|
if exerciseIndex >= currentSuperSet.exercises.count {
|
|
currentRound += 1
|
|
|
|
if currentRound > currentSuperSet.rounds {
|
|
supersetIndex += 1
|
|
currentRound = 1
|
|
|
|
if supersetIndex >= supersets.count {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
exerciseIndex = 0
|
|
}
|
|
|
|
let superset = supersets[supersetIndex]
|
|
let exercise = superset.exercises[exerciseIndex]
|
|
allSupersetExecerciseIndex += 1
|
|
return exercise
|
|
}
|
|
|
|
var previousExercise: SupersetExercise? {
|
|
let supersets = superset
|
|
guard supersets.isEmpty == false else { return nil }
|
|
|
|
exerciseIndex -= 1
|
|
if exerciseIndex < 0 {
|
|
if currentRound > 1 {
|
|
currentRound -= 1
|
|
let superset = supersets[supersetIndex]
|
|
exerciseIndex = superset.exercises.count-1
|
|
} else {
|
|
if supersetIndex > 0 {
|
|
supersetIndex -= 1
|
|
let superset = supersets[supersetIndex]
|
|
currentRound = superset.rounds
|
|
exerciseIndex = superset.exercises.count-1
|
|
} else {
|
|
exerciseIndex = 0
|
|
}
|
|
}
|
|
}
|
|
|
|
let superset = supersets[supersetIndex]
|
|
let exercise = superset.exercises[exerciseIndex]
|
|
|
|
allSupersetExecerciseIndex -= 1
|
|
if allSupersetExecerciseIndex < 0 {
|
|
allSupersetExecerciseIndex = 0
|
|
}
|
|
|
|
return exercise
|
|
}
|
|
|
|
func start(workout: Workout) {
|
|
reset()
|
|
self.workout = workout
|
|
}
|
|
|
|
func reset() {
|
|
supersetIndex = 0
|
|
exerciseIndex = 0
|
|
currentRound = 1
|
|
allSupersetExecerciseIndex = 0
|
|
self.workout = nil
|
|
}
|
|
|
|
@discardableResult
|
|
func goToExerciseAt(supersetIndex: Int, exerciseIndex: Int) -> SupersetExercise? {
|
|
self.supersetIndex = supersetIndex
|
|
self.exerciseIndex = exerciseIndex
|
|
self.currentRound = 1
|
|
|
|
let currentExercise = currentExercise
|
|
if let firstIdx = workout?.allSupersetExecercise?.firstIndex(where: {
|
|
$0.exercise.id == currentExercise?.exercise.id
|
|
}) {
|
|
allSupersetExecerciseIndex = firstIdx
|
|
}
|
|
|
|
return currentExercise
|
|
}
|
|
}
|