// // WorkoutLogsView.swift // Workouts Watch App // // Copyright 2025 Rouslan Zenetl. All Rights Reserved. // import SwiftUI import SwiftData struct WorkoutLogsView: View { @Environment(WatchConnectivityBridge.self) private var bridge @Query(sort: \Workout.start, order: .reverse) private var workouts: [Workout] var body: some View { NavigationStack { List { ForEach(workouts) { workout in NavigationLink(destination: WorkoutLogListView(workout: workout)) { WorkoutRow(workout: workout) } } } .overlay { if workouts.isEmpty { ContentUnavailableView( "No Workouts", systemImage: "list.bullet.clipboard", description: Text("Tap sync or start a workout from iPhone.") ) } } .navigationTitle("Workouts") .toolbar { ToolbarItem(placement: .topBarTrailing) { Button { bridge.requestSync() } label: { Image(systemName: "arrow.triangle.2.circlepath") } } } .task { if workouts.isEmpty { bridge.requestSync() } } } } } // MARK: - Workout Row struct WorkoutRow: View { let workout: Workout var body: some View { VStack(alignment: .leading, spacing: 4) { Text(workout.splitName ?? Split.unnamed) .font(.headline) .lineLimit(1) HStack { Text(workout.start.formatDate()) .font(.caption2) .foregroundColor(.secondary) Spacer() statusIndicator } } .padding(.vertical, 4) } @ViewBuilder private var statusIndicator: some View { switch workout.status { case .completed: Image(systemName: "checkmark.circle.fill") .foregroundColor(.green) case .inProgress: Image(systemName: "circle.dotted") .foregroundColor(.orange) case .notStarted: Image(systemName: "circle") .foregroundColor(.secondary) case .skipped: Image(systemName: "xmark.circle") .foregroundColor(.secondary) } } }