Files
workoutsplus/WorkoutsPlus/Features/WorkoutSession/WorkoutStateManager.swift
T
2024-11-26 17:22:29 +01:00

62 lines
1.5 KiB
Swift

//
// WorkoutStateManager.swift
// WorkoutsPlus
//
// Created by Felix Förtsch on 21.11.24.
//
import SwiftUI
import SwiftData
@Observable
final class WorkoutStateManager {
private let modelContext: ModelContext
private(set) var activeWorkoutSession: WorkoutSession?
var isWorkoutInProgress: Bool { activeWorkoutSession != nil }
init(modelContext: ModelContext) {
self.modelContext = modelContext
}
func startWorkout(_ workout: Workout) {
let session = WorkoutSession(start: workout)
modelContext.insert(session)
activeWorkoutSession = session
}
func stopWorkout() {
if let _ = activeWorkoutSession {
activeWorkoutSession = nil
}
}
func cancelWorkout(context: ModelContext) {
if let session = activeWorkoutSession {
context.delete(session)
activeWorkoutSession = nil
}
}
func prevExercise() {
if let session = activeWorkoutSession {
session.workoutSessionItems[session.currentExercise].startDate = Date.now
if session.currentExercise > 0 {
session.currentExercise -= 1
}
}
}
func nextExercise() {
if let session = activeWorkoutSession {
session.workoutSessionItems[session.currentExercise].stopDate = Date.now
if session.currentExercise < session.workoutSessionItems.count - 1 {
session.currentExercise += 1
}
}
}
func getWorkoutDuration() -> String {
activeWorkoutSession?.getFormattedDuration() ?? "00:00:00"
}
}