diff --git a/ios/Platform/Platform/Features/Assistant/EditableDraftCard.swift b/ios/Platform/Platform/Features/Assistant/EditableDraftCard.swift index 4525ef6..50d39b3 100644 --- a/ios/Platform/Platform/Features/Assistant/EditableDraftCard.swift +++ b/ios/Platform/Platform/Features/Assistant/EditableDraftCard.swift @@ -3,6 +3,13 @@ import SwiftUI struct EditableDraftCard: View { @Bindable var vm: AssistantViewModel @State private var isEditing = false + // Base values per 1.0 quantity — set once when draft appears + @State private var baseCalories: Double? + @State private var baseProtein: Double? + @State private var baseCarbs: Double? + @State private var baseFat: Double? + @State private var baseSugar: Double? + @State private var baseFiber: Double? private var draft: FitnessDraft? { vm.currentDraft } @@ -135,9 +142,35 @@ struct EditableDraftCard: View { .clipShape(RoundedRectangle(cornerRadius: 14)) .shadow(color: .black.opacity(0.06), radius: 6, y: 2) .padding(.horizontal, 12) + .onAppear { + // Capture base per-unit values on first appearance + if baseCalories == nil, let d = vm.currentDraft { + let q = max(d.quantity, 0.01) + baseCalories = d.calories / q + baseProtein = d.protein / q + baseCarbs = d.carbs / q + baseFat = d.fat / q + baseSugar = d.sugar / q + baseFiber = d.fiber / q + } + } } } + /// Recalculate macros from base values when quantity changes + private func recalculateMacros() { + guard let bc = baseCalories, let bp = baseProtein, + let bca = baseCarbs, let bf = baseFat, + let bs = baseSugar, let bfi = baseFiber else { return } + let q = vm.currentDraft?.quantity ?? 1.0 + vm.currentDraft?.calories = (bc * q).rounded() + vm.currentDraft?.protein = (bp * q * 10).rounded() / 10 + vm.currentDraft?.carbs = (bca * q * 10).rounded() / 10 + vm.currentDraft?.fat = (bf * q * 10).rounded() / 10 + vm.currentDraft?.sugar = (bs * q * 10).rounded() / 10 + vm.currentDraft?.fiber = (bfi * q * 10).rounded() / 10 + } + // MARK: - Editable macro cell private func editableMacro(_ label: String, value: Binding, color: Color) -> some View { @@ -196,7 +229,10 @@ struct EditableDraftCard: View { private var quantityBinding: Binding { Binding( get: { String(format: "%.1f", vm.currentDraft?.quantity ?? 1) }, - set: { vm.currentDraft?.quantity = Double($0) ?? 1 } + set: { + vm.currentDraft?.quantity = Double($0) ?? 1 + recalculateMacros() + } ) } }