import Foundation import SwiftData import SwiftUI @Model final class Split { var name: String = "" var intro: String = "" @Relationship(deleteRule: .cascade, inverse: \SplitExerciseAssignment.split) var exercises: [SplitExerciseAssignment]? = [] @Relationship(deleteRule: .nullify, inverse: \Workout.split) var workouts: [Workout]? = [] init(name: String, intro: String) { self.name = name self.intro = intro } } // MARK: - EditableEntity Conformance extension Split: EditableEntity { var count: Int? { return self.exercises?.count } static func createNew() -> Split { return Split(name: "", intro: "") } static var navigationTitle: String { return "Splits" } @ViewBuilder static func formView(for model: Split) -> some View { EntityAddEditView(model: model) { $model in SplitFormView(model: $model) } } } // MARK: - Private Form View fileprivate struct SplitFormView: View { @Binding var model: Split @State private var itemToDelete: SplitExerciseAssignment? = nil var body: some View { Section(header: Text("Name")) { TextField("Name", text: $model.name) .bold() } Section(header: Text("Description")) { TextEditor(text: $model.intro) .frame(minHeight: 100) } Section(header: Text("Exercises")) { if let assignments = model.exercises, !assignments.isEmpty { ForEach(assignments) { item in ListItem( title: item.exercise?.name ?? "Unnamed", subtitle: "\(item.sets) × \(item.reps) @ \(item.weight) lbs" ) .swipeActions { Button(role: .destructive) { itemToDelete = item } label: { Label("Delete", systemImage: "trash") } } } } else { Text("No exercises added yet.") } Button(action: { // TODO: Implement add exercise functionality }) { Label("Add Exercise", systemImage: "plus.circle") } } .confirmationDialog("Delete Exercise?", isPresented: .constant(itemToDelete != nil), titleVisibility: .visible) { Button("Delete", role: .destructive) { if let item = itemToDelete { withAnimation { model.exercises?.removeAll { $0.id == item.id } itemToDelete = nil } } } } } }