import Foundation import CoreData @objc(Exercise) public class Exercise: NSManagedObject, Identifiable { @NSManaged public var name: String @NSManaged public var loadType: Int32 @NSManaged public var order: Int32 @NSManaged public var sets: Int32 @NSManaged public var reps: Int32 @NSManaged public var weight: Int32 @NSManaged public var duration: Date? @NSManaged public var weightLastUpdated: Date? @NSManaged public var weightReminderTimeIntervalWeeks: Int32 @NSManaged public var split: Split? public var id: NSManagedObjectID { objectID } var loadTypeEnum: LoadType { get { LoadType(rawValue: Int(loadType)) ?? .weight } set { loadType = Int32(newValue.rawValue) } } // Duration helpers for minutes/seconds conversion var durationMinutes: Int { get { guard let duration = duration else { return 0 } return Int(duration.timeIntervalSince1970) / 60 } set { let seconds = durationSeconds duration = Date(timeIntervalSince1970: TimeInterval(newValue * 60 + seconds)) } } var durationSeconds: Int { get { guard let duration = duration else { return 0 } return Int(duration.timeIntervalSince1970) % 60 } set { let minutes = durationMinutes duration = Date(timeIntervalSince1970: TimeInterval(minutes * 60 + newValue)) } } } // MARK: - Fetch Request extension Exercise { @nonobjc public class func fetchRequest() -> NSFetchRequest { return NSFetchRequest(entityName: "Exercise") } static func orderedFetchRequest(for split: Split) -> NSFetchRequest { let request = fetchRequest() request.predicate = NSPredicate(format: "split == %@", split) request.sortDescriptors = [NSSortDescriptor(keyPath: \Exercise.order, ascending: true)] return request } } enum LoadType: Int, CaseIterable { case none = 0 case weight = 1 case duration = 2 var name: String { switch self { case .none: "None" case .weight: "Weight" case .duration: "Duration" } } }