#if DEBUG
import SwiftUI
import SwiftData

/// DEBUG-only root used for App Store screenshot capture. Bypasses the iCloud gate and
/// renders one fully-formed screen (chosen by `--screen`) against the seeded cache, so
/// captures are deterministic with no UI automation. Never compiled into release.
struct ScreenshotRootView: View {
    let services: AppServices

    private var activeWorkout: Workout? {
        let context = services.container.mainContext
        var descriptor = FetchDescriptor<Workout>(sortBy: [SortDescriptor(\.start, order: .reverse)])
        descriptor.fetchLimit = 25
        let workouts = (try? context.fetch(descriptor)) ?? []
        return workouts.first { $0.status == .inProgress } ?? workouts.first
    }

    var body: some View {
        content
            .environment(services)
            .environment(services.syncEngine)
            .environment(services.liveRunState)
            .modelContainer(services.container)
    }

    @ViewBuilder
    private var content: some View {
        // The full tab shell and the Progress tab need no particular workout,
        // so they're handled before the active-workout unwrap.
        if ScreenshotSeed.screen(default: "workouts") == "today" {
            ContentView()
        } else if ScreenshotSeed.screen(default: "workouts") == "progress" {
            ProgressTabView()
        } else if ScreenshotSeed.screen(default: "workouts") == "progress-bottom" {
            ProgressTabView(initialAnchor: .bottom)
        } else if ScreenshotSeed.screen(default: "workouts") == "exercise-trends" {
            NavigationStack { ExerciseTrendsListView() }
        } else if let workout = activeWorkout {
            switch ScreenshotSeed.screen(default: "workouts") {
            case "exercise":
                let logID = WorkoutDocument(from: workout).logs.first { $0.exerciseName == "Seated Row" }?.id
                NavigationStack { ExerciseView(workout: workout, logID: logID ?? "") }
            case "run":
                ScreenshotRunView(workout: workout)
                    // Believable watch-fed values so the status panel isn't placeholders.
                    .onAppear { services.liveRunState.applyLiveSample(bpm: 128, kcal: 236, zone: 3) }
            case "settings":
                SettingsView()
            default:
                NavigationStack { WorkoutLogListView(workout: workout) }
            }
        } else {
            Color(.systemBackground)
        }
    }
}

/// The paged run flow for the in-progress exercise, showing the animated form guide
/// (with machine props) — the screenshot works off its own local document copy, so
/// nothing persists.
private struct ScreenshotRunView: View {
    @State private var doc: WorkoutDocument
    private let logID: String

    init(workout: Workout) {
        let document = WorkoutDocument(from: workout)
        _doc = State(initialValue: document)
        logID = document.logs.first { $0.exerciseName == "Seated Row" }?.id
            ?? document.logs.first?.id ?? ""
    }

    var body: some View {
        NavigationStack {
            ExerciseProgressView(doc: $doc, logID: logID, onChange: {},
                                 onLive: { _ in }, onLiveEnded: {}, incomingFrame: nil)
        }
    }
}
#endif
