// // SettingsView.swift // Workouts // // Created by rzen on 7/13/25 at 10:24 AM. // // Copyright 2025 Rouslan Zenetl. All Rights Reserved. // import SwiftUI import SwiftData import CloudKit enum AppStorageKeys { static let iCloudSyncEnabled = "iCloudSyncEnabled" } struct SettingsView: View { @Environment(\.modelContext) private var modelContext @State private var showingClearAllDataConfirmation = false var splitsCount: Int? { try? modelContext.fetchCount(FetchDescriptor()) } var body: some View { NavigationStack { Form { Section (header: Text("Lists")) { NavigationLink(destination: SplitsListView()) { HStack { Text("Splits") Spacer() Text("\(splitsCount ?? 0)") .font(.caption) .foregroundColor(.gray) } } } Section(header: Text("Developer")) { Button(action: { showingClearAllDataConfirmation = true }) { HStack { Label("Clear All Data", systemImage: "trash") Spacer() } } .foregroundColor(.red) .confirmationDialog( "Clear All Data?", isPresented: $showingClearAllDataConfirmation, titleVisibility: .visible ) { Button("Clear All Data", role: .destructive) { clearAllData() } Button("Cancel", role: .cancel) {} } message: { Text("This action cannot be undone. All data will be permanently deleted.") } } } .navigationTitle("Settings") } } func deleteAllObjects(ofType type: T.Type, from context: ModelContext) throws { let descriptor = FetchDescriptor() let allObjects = try context.fetch(descriptor) for object in allObjects { context.delete(object) } try context.save() } private func clearAllData () { do { try deleteAllObjects(ofType: Split.self, from: modelContext) try deleteAllObjects(ofType: SplitExerciseAssignment.self, from: modelContext) try deleteAllObjects(ofType: Workout.self, from: modelContext) try deleteAllObjects(ofType: WorkoutLog.self, from: modelContext) try modelContext.save() } catch { print("Failed to clear all data: \(error)") } } } struct SplitsListView: View { var body: some View { EntityListView(sort: [SortDescriptor(\Split.name)]) } }