import Foundation import SwiftData // CloudKit-compatible (2.0): no unique constraints, inline defaults everywhere. @Model final class MealSlot { var id: UUID = UUID() var dayOfWeek: Int = 0 // 0=Monday, 6=Sunday var mealType: String = MealType.dinner.rawValue var dishId: UUID? var calendarEventId: String? var isRuleOverridden: Bool = false var isEatingOut: Bool = false var weekPlan: WeekPlan? init( id: UUID = UUID(), dayOfWeek: Int, mealType: String, dishId: UUID? = nil, calendarEventId: String? = nil, isRuleOverridden: Bool = false, isEatingOut: Bool = false ) { self.id = id self.dayOfWeek = dayOfWeek self.mealType = mealType self.dishId = dishId self.calendarEventId = calendarEventId self.isRuleOverridden = isRuleOverridden self.isEatingOut = isEatingOut } var mealTypeEnum: MealType { get { MealType(rawValue: mealType) ?? .dinner } set { mealType = newValue.rawValue } } } extension MealSlot { static func preferredForDuplicateResolution(_ slots: [MealSlot]) -> MealSlot { slots.sorted { lhs, rhs in let lhsHasDish = lhs.dishId != nil let rhsHasDish = rhs.dishId != nil if lhsHasDish != rhsHasDish { return lhsHasDish } let lhsHasEvent = lhs.calendarEventId != nil let rhsHasEvent = rhs.calendarEventId != nil if lhsHasEvent != rhsHasEvent { return lhsHasEvent } return lhs.id.uuidString < rhs.id.uuidString }.first ?? slots[0] } }