// // WorkoutLogCardView.swift // Workouts // // Created by rzen on 7/22/25 at 9:56 PM. // // Copyright 2025 Rouslan Zenetl. All Rights Reserved. // import SwiftUI struct WorkoutLogCardView: View { let log: WorkoutLog var body: some View { VStack(alignment: .leading, spacing: 8) { Text(log.exerciseName) .font(.headline) .lineLimit(1) Text(getStatusText(for: log)) .font(.caption) .foregroundStyle(Color.accentColor) HStack(spacing: 12) { Text("\(log.weight) lbs") Spacer() Text("\(log.sets) × \(log.reps)") } } } private func getStatusText(for log: WorkoutLog) -> String { guard let status = log.status else { return "Not Started" } if status == .inProgress, let currentStateIndex = log.currentStateIndex { let currentSet = getCurrentSetNumber(stateIndex: currentStateIndex, totalSets: log.sets) if currentSet > 0 { return "In Progress, Set #\(currentSet)" } } return status.name } private func getCurrentSetNumber(stateIndex: Int, totalSets: Int) -> Int { // Exercise states are structured as: intro(0) → set1(1) → rest1(2) → set2(3) → rest2(4) → ... → done // For each set number n, set state index = 2n-1, rest state index = 2n if stateIndex <= 0 { return 0 // intro or invalid } // Check if we're in a rest state (even indices > 0) let isRestState = stateIndex > 0 && stateIndex % 2 == 0 if isRestState { // During rest, show the next set number let nextSetNumber = (stateIndex / 2) + 1 return min(nextSetNumber, totalSets) } else { // During set, show current set number let currentSetNumber = (stateIndex + 1) / 2 return min(currentSetNumber, totalSets) } } }