/ BalanceKit / EditFoodView.swift
EditFoodView.swift
  1  //
  2  //  EditFoodView.swift
  3  //  BalanceKit
  4  //
  5  //  Created by Alexander Kunau on 12.07.25.
  6  //
  7  
  8  import SwiftUI
  9  
 10  struct EditFoodView: View {
 11      @Environment(\.dismiss) private var dismiss
 12      @ObservedObject var dataManager: FoodDataManager
 13      
 14      var foodItem: FoodItem
 15      
 16      @State private var name: String
 17      @State private var calories: String
 18      @State private var protein: String
 19      @State private var carbs: String
 20      @State private var fat: String
 21      @State private var date: Date
 22      @State private var mealType: MealType
 23      
 24      // Initialisierung mit dem zu bearbeitenden FoodItem
 25      init(dataManager: FoodDataManager, foodItem: FoodItem) {
 26          self.dataManager = dataManager
 27          self.foodItem = foodItem
 28          
 29          // Initialisiere die State-Variablen mit den Werten des FoodItems
 30          _name = State(initialValue: foodItem.name)
 31          _calories = State(initialValue: String(foodItem.calories))
 32          _protein = State(initialValue: String(format: "%.1f", foodItem.protein))
 33          _carbs = State(initialValue: String(format: "%.1f", foodItem.carbs))
 34          _fat = State(initialValue: String(format: "%.1f", foodItem.fat))
 35          _date = State(initialValue: foodItem.date)
 36          _mealType = State(initialValue: foodItem.mealType)
 37      }
 38      
 39      var body: some View {
 40          NavigationStack {
 41              Form {
 42                  Section(header: Text("Nahrungsmittel-Details")) {
 43                      TextField("Name", text: $name)
 44                      
 45                      TextField("Kalorien", text: $calories)
 46                          .keyboardType(.numberPad)
 47                      
 48                      TextField("Protein (g)", text: $protein)
 49                          .keyboardType(.decimalPad)
 50                      
 51                      TextField("Kohlenhydrate (g)", text: $carbs)
 52                          .keyboardType(.decimalPad)
 53                      
 54                      TextField("Fett (g)", text: $fat)
 55                          .keyboardType(.decimalPad)
 56                  }
 57                  
 58                  Section(header: Text("Zeitpunkt")) {
 59                      DatePicker("Datum & Zeit", selection: $date)
 60                      
 61                      Picker("Mahlzeit", selection: $mealType) {
 62                          ForEach(MealType.allCases, id: \.self) { type in
 63                              Label(type.rawValue, systemImage: type.icon).tag(type)
 64                          }
 65                      }
 66                  }
 67              }
 68              .navigationTitle("Eintrag bearbeiten")
 69              .navigationBarTitleDisplayMode(.inline)
 70              .toolbar {
 71                  ToolbarItem(placement: .cancellationAction) {
 72                      Button("Abbrechen") {
 73                          dismiss()
 74                      }
 75                  }
 76                  
 77                  ToolbarItem(placement: .confirmationAction) {
 78                      Button("Speichern") {
 79                          saveChanges()
 80                      }
 81                  }
 82              }
 83          }
 84      }
 85      
 86      private func saveChanges() {
 87          // Konvertiere die Texteingaben in die richtigen Typen
 88          guard let caloriesInt = Int(calories),
 89                let proteinDouble = Double(protein.replacingOccurrences(of: ",", with: ".")),
 90                let carbsDouble = Double(carbs.replacingOccurrences(of: ",", with: ".")),
 91                let fatDouble = Double(fat.replacingOccurrences(of: ",", with: ".")) else {
 92              // Hier könnte eine Fehlerbehandlung stehen
 93              return
 94          }
 95          
 96          // Aktualisiere das FoodItem über den DataManager
 97          dataManager.updateFoodItem(
 98              id: foodItem.id,
 99              name: name,
100              calories: caloriesInt,
101              protein: proteinDouble,
102              carbs: carbsDouble,
103              fat: fatDouble,
104              date: date,
105              mealType: mealType
106          )
107          
108          dismiss()
109      }
110  }