// // FuelLogListView.swift // Gas Man // // Created by Kameron Kenny on 3/17/25. // import SwiftUI import CoreData struct FuelLogListView: View { @Environment(\.managedObjectContext) private var viewContext @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \FuelLog.date, ascending: false)], animation: .default) private var fuelLogs: FetchedResults @State private var showingAddFuelLog = false // Controls sheet presentation var body: some View { NavigationView { List { ForEach(Array(fuelLogs.enumerated()), id: \.element) { index, log in // Compute distance since the previous record: let distance: Double? = { if index < fuelLogs.count - 1 { let previousLog = fuelLogs[index + 1] let milesDriven = log.odometer - previousLog.odometer return milesDriven > 0 ? milesDriven : nil } return nil }() // Compute MPG (if possible) let mpg: Double? = { if index < fuelLogs.count - 1 { let previousLog = fuelLogs[index + 1] let milesDriven = log.odometer - previousLog.odometer if log.fuelVolume > 0 && milesDriven > 0 { return milesDriven / log.fuelVolume } } return nil }() NavigationLink(destination: FuelLogDetailView(fuelLog: log)) { FuelLogSummaryView(log: log, mpg: mpg, distanceSincePrevious: distance) } } .onDelete(perform: deleteFuelLogs) } .listStyle(InsetGroupedListStyle()) .navigationTitle("Fuel Logs") .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button(action: { showingAddFuelLog = true // Present AddFuelLogView }) { Label("Add Fuel Log", systemImage: "plus") } } ToolbarItem(placement: .navigationBarLeading) { EditButton() } } // Sheet presentation for AddFuelLogView .sheet(isPresented: $showingAddFuelLog) { AddFuelLogView().environment(\.managedObjectContext, viewContext) } } } private func deleteFuelLogs(offsets: IndexSet) { withAnimation { offsets.map { fuelLogs[$0] }.forEach(viewContext.delete) do { try viewContext.save() } catch { let nsError = error as NSError fatalError("Unresolved error \(nsError), \(nsError.userInfo)") } } } }