// // CreateViewRepsWeightView.swift // Werkout_ios // // Created by Trey Tartt on 6/18/23. // import SwiftUI import AVFoundation struct CreateExerciseActionsView: View { @ObservedObject var workoutExercise: CreateWorkoutExercise @ObservedObject var superset: CreateWorkoutSuperSet var viewModel: WorkoutViewModel @State var avPlayer = AVPlayer(url: URL(string: BaseURLs.currentBaseURL + "/media/exercise_videos/2_Dumbbell_Lateral_Lunges.mp4") ?? URL(fileURLWithPath: "/dev/null")) @State private var currentVideoURL: URL? @State var videoExercise: Exercise? { didSet { if let viddd = self.videoExercise?.videoURL, let url = URL(string: BaseURLs.currentBaseURL + viddd) { updatePlayer(for: url) } } } var body: some View { VStack(spacing: WerkoutTheme.sm) { VStack(spacing: WerkoutTheme.xs) { HStack { Text("Reps: ") .font(WerkoutTheme.bodyText) .foregroundStyle(WerkoutTheme.textSecondary) Text("\(workoutExercise.reps)") .foregroundColor(workoutExercise.reps == 0 && workoutExercise.duration == 0 ? WerkoutTheme.danger : WerkoutTheme.textPrimary) .font(WerkoutTheme.bodyText) .bold() Stepper("", onIncrement: { workoutExercise.increaseReps() }, onDecrement: { workoutExercise.decreaseReps() }) .tint(WerkoutTheme.accent) .accessibilityLabel("Reps") } } HStack { Text("Weight: ") .font(WerkoutTheme.bodyText) .foregroundStyle(WerkoutTheme.textSecondary) Text("\(workoutExercise.weight)") .font(WerkoutTheme.bodyText) .foregroundStyle(WerkoutTheme.textPrimary) Stepper("", onIncrement: { workoutExercise.increaseWeight() }, onDecrement: { workoutExercise.decreaseWeight() }) .tint(WerkoutTheme.accent) .accessibilityLabel("Weight") } HStack { Text("Duration: ") .font(WerkoutTheme.bodyText) .foregroundStyle(WerkoutTheme.textSecondary) Text("\(workoutExercise.duration)") .foregroundColor( workoutExercise.reps == 0 && workoutExercise.duration == 0 ? WerkoutTheme.danger : WerkoutTheme.textPrimary ) .font(WerkoutTheme.bodyText) .bold() Stepper("", onIncrement: { workoutExercise.increaseDuration() }, onDecrement: { workoutExercise.decreaseDuration() }) .tint(WerkoutTheme.accent) .accessibilityLabel("Duration") } GlassEffectContainer { HStack { Spacer() Button(action: { videoExercise = workoutExercise.exercise }) { Image(systemName: "video.fill") .foregroundStyle(WerkoutTheme.textPrimary) } .frame(width: 88, height: 44) .glassEffect(.regular.interactive()) .tint(WerkoutTheme.accent) .buttonStyle(BorderlessButtonStyle()) .accessibilityLabel("Preview exercise video") .accessibilityHint("Opens a video preview for this exercise") Spacer() Spacer() Button(action: { superset .deleteExerciseForChosenSuperset(exercise: workoutExercise) viewModel.increaseRandomNumberForUpdating() }) { Image(systemName: "trash.fill") .foregroundStyle(WerkoutTheme.textPrimary) } .frame(width: 88, height: 44) .glassEffect(.regular.interactive()) .tint(WerkoutTheme.danger) .buttonStyle(BorderlessButtonStyle()) .accessibilityLabel("Delete exercise") .accessibilityHint("Removes this exercise from the superset") Spacer() } } } .sheet(item: $videoExercise) { exercise in PlayerView(player: $avPlayer) .onAppear{ avPlayer.isMuted = true avPlayer.play() } } .onDisappear { avPlayer.pause() } } private func updatePlayer(for url: URL) { if currentVideoURL == url { avPlayer.seek(to: .zero) avPlayer.isMuted = true avPlayer.play() return } currentVideoURL = url avPlayer = AVPlayer(url: url) avPlayer.isMuted = true avPlayer.play() } } //struct CreateViewRepsWeightView_Previews: PreviewProvider { // static var previews: some View { // CreateViewRepsWeightView() // } //}