diff --git a/Gas Man/FuelLogs/FuelLogListView.swift b/Gas Man/FuelLogs/FuelLogListView.swift index 5f21378..212c7c2 100644 --- a/Gas Man/FuelLogs/FuelLogListView.swift +++ b/Gas Man/FuelLogs/FuelLogListView.swift @@ -20,7 +20,7 @@ struct FuelLogListView: View { @State private var selectedVehicleID: UUID? = nil @State private var showAddVehicleSheet = false - // For tracking the previous odometer reading + // For tracking the previous odometer reading (used for validation) @State private var previousOdometer: Double? = nil @State private var showOdometerAlert = false @State private var isUpdatingCalculation = false @@ -44,9 +44,32 @@ struct FuelLogListView: View { } } + // Computed property to calculate average MPG for full-tank logs. + // MPG for an individual log is computed as: + // (current.odometer - next.odometer) / current.fuelVolume + private var averageMPG: Double? { + let logs = filteredFuelLogs + guard logs.count > 1 else { return nil } + var mpgValues: [Double] = [] + // Iterate over logs except the oldest. + for i in 0.. 0, current.odometer > next.odometer { + let mpg = (current.odometer - next.odometer) / current.fuelVolume + mpgValues.append(mpg) + } + } + guard !mpgValues.isEmpty else { return nil } + let total = mpgValues.reduce(0, +) + return total / Double(mpgValues.count) + } + var body: some View { NavigationView { if vehicles.isEmpty { + // Empty state: no vehicles exist. VStack(spacing: 20) { Text("No vehicles found.") .font(.headline) @@ -67,6 +90,7 @@ struct FuelLogListView: View { } } else { List { + // Vehicle Picker Section Section { Picker("Vehicle", selection: $selectedVehicleID) { ForEach(vehicles, id: \.id) { vehicle in @@ -77,6 +101,22 @@ struct FuelLogListView: View { .pickerStyle(MenuPickerStyle()) } + // Average MPG Section + Section { + HStack { + Text("Average MPG:") + Spacer() + if let avg = averageMPG { + Text("\(avg, specifier: "%.1f")") + .bold() + } else { + Text("N/A") + .foregroundColor(.secondary) + } + } + } + + // Fuel Logs Section (filtered by selected vehicle) ForEach(filteredFuelLogs.indices, id: \.self) { index in let log = filteredFuelLogs[index] let distance: Double? = { @@ -131,6 +171,7 @@ struct FuelLogListView: View { } } + // Set default vehicle selection on appear. private func setDefaultVehicle() { if selectedVehicleID == nil { if let lastFuelLog = fuelLogs.first, let vehicle = lastFuelLog.vehicle {