import Foundation import SwiftData // CloudKit-compatible (2.0): no unique constraints, inline defaults everywhere. @Model final class Tag { var id: UUID = UUID() var name: String = "" var nameEN: String = "" var color: String = "" var maxPerWeek: Int? var noConsecutive: Bool = false var noDuplicateInDay: Bool = false var mealTypeRestriction: String? // "lunch", "dinner", nil var dayRestriction: String? // nil = any day, "weekdays" = Mon-Fri, "weekend" = Sat-Sun var isDefault: Bool = true var sortOrder: Int = 0 init( id: UUID = UUID(), name: String, nameEN: String = "", color: String, maxPerWeek: Int? = nil, noConsecutive: Bool = false, noDuplicateInDay: Bool = false, mealTypeRestriction: String? = nil, dayRestriction: String? = nil, isDefault: Bool = true, sortOrder: Int = 0 ) { self.id = id self.name = name self.nameEN = nameEN self.color = color self.maxPerWeek = maxPerWeek self.noConsecutive = noConsecutive self.noDuplicateInDay = noDuplicateInDay self.mealTypeRestriction = mealTypeRestriction self.dayRestriction = dayRestriction self.isDefault = isDefault self.sortOrder = sortOrder } func localizedName(language: AppLanguage) -> String { switch language.resolved() { case .spanish: return name case .english, .french, .german, .italian, .portugueseBrazil: return nameEN.isEmpty ? name : nameEN case .system: return nameEN.isEmpty ? name : nameEN } } var rulesDescription: String { localizedRulesDescription(language: .spanish) } func localizedRulesDescription(language: AppLanguage) -> String { let resolvedLanguage = language.resolved() var parts: [String] = [] if let max = maxPerWeek { switch resolvedLanguage { case .spanish: parts.append("Max \(max)/semana") case .english, .french, .german, .italian, .portugueseBrazil: parts.append("Max \(max)/week") case .system: parts.append("Max \(max)/week") } } if noConsecutive { parts.append(resolvedLanguage == .spanish ? "no consecutivo" : "no consecutive") } if noDuplicateInDay { parts.append(resolvedLanguage == .spanish ? "no mismo día" : "no same day") } if let restriction = mealTypeRestriction { if resolvedLanguage == .spanish { parts.append(restriction == "lunch" ? "solo comida" : "solo cena") } else { parts.append(restriction == "lunch" ? "lunch only" : "dinner only") } } if let day = dayRestriction { switch (day, resolvedLanguage) { case ("weekdays", .spanish): parts.append("entre semana") case ("weekdays", _): parts.append("weekdays") case ("weekend", .spanish): parts.append("fin de semana") case ("weekend", _): parts.append("weekend") default: break } } return parts.isEmpty ? (resolvedLanguage == .spanish ? "Sin límite" : "No limit") : parts.joined(separator: ", ") } }