// // SplitAddEditView.swift // Workouts // // Created by rzen on 7/18/25 at 9:42 AM. // // Copyright 2025 Rouslan Zenetl. All Rights Reserved. // import SwiftUI import CoreData struct SplitAddEditView: View { @Environment(\.managedObjectContext) private var viewContext @Environment(\.dismiss) private var dismiss let split: Split? var onDelete: (() -> Void)? @State private var name: String = "" @State private var color: String = "indigo" @State private var systemImage: String = "dumbbell.fill" @State private var showingIconPicker: Bool = false @State private var showingDeleteConfirmation: Bool = false private let availableColors = ["red", "orange", "yellow", "green", "mint", "teal", "cyan", "blue", "indigo", "purple", "pink", "brown"] var isEditing: Bool { split != nil } init(split: Split?, onDelete: (() -> Void)? = nil) { self.split = split self.onDelete = onDelete if let split = split { _name = State(initialValue: split.name) _color = State(initialValue: split.color) _systemImage = State(initialValue: split.systemImage) } } var body: some View { NavigationStack { Form { Section(header: Text("Name")) { TextField("Name", text: $name) .bold() } Section(header: Text("Appearance")) { Picker("Color", selection: $color) { ForEach(availableColors, id: \.self) { colorName in HStack { Circle() .fill(Color.color(from: colorName)) .frame(width: 20, height: 20) Text(colorName.capitalized) } .tag(colorName) } } Button { showingIconPicker = true } label: { HStack { Text("Icon") .foregroundColor(.primary) Spacer() Image(systemName: systemImage) .font(.title2) .foregroundColor(.accentColor) } } } if let split = split { Section(header: Text("Exercises")) { NavigationLink { ExerciseListView(split: split) } label: { ListItem( text: "Exercises", count: split.exercisesArray.count ) } } Section { Button("Delete Split", role: .destructive) { showingDeleteConfirmation = true } } } } .navigationTitle(isEditing ? "Edit Split" : "New Split") .toolbar { ToolbarItem(placement: .navigationBarLeading) { Button("Cancel") { dismiss() } } ToolbarItem(placement: .navigationBarTrailing) { Button("Save") { save() dismiss() } .disabled(name.isEmpty) } } .sheet(isPresented: $showingIconPicker) { SFSymbolPicker(selection: $systemImage) } .confirmationDialog( "Delete This Split?", isPresented: $showingDeleteConfirmation, titleVisibility: .visible ) { Button("Delete", role: .destructive) { if let split = split { viewContext.delete(split) try? viewContext.save() dismiss() onDelete?() } } } message: { Text("This will permanently delete the split and all its exercises.") } } } private func save() { if let split = split { // Update existing split.name = name split.color = color split.systemImage = systemImage } else { // Create new let newSplit = Split(context: viewContext) newSplit.name = name newSplit.color = color newSplit.systemImage = systemImage newSplit.order = 0 } try? viewContext.save() } }