import Foundation

@MainActor @Observable
final class HomeViewModel {
    var todayEntries: [FoodEntry] = []
    var goal: DailyGoal = .defaultGoal
    var isLoading = true
    var errorMessage: String?

    private let repo = FitnessRepository.shared

    var totalCalories: Double {
        todayEntries.reduce(0) { $0 + $1.calories }
    }

    var totalProtein: Double {
        todayEntries.reduce(0) { $0 + $1.protein }
    }

    var totalCarbs: Double {
        todayEntries.reduce(0) { $0 + $1.carbs }
    }

    var totalFat: Double {
        todayEntries.reduce(0) { $0 + $1.fat }
    }

    var entryCount: Int {
        todayEntries.count
    }

    func load() async {
        isLoading = true
        errorMessage = nil
        let today = Date().apiDateString

        do {
            async let entriesTask = repo.entries(for: today, forceRefresh: true)
            async let goalsTask = repo.goals(for: today)

            todayEntries = try await entriesTask
            goal = try await goalsTask
        } catch {
            errorMessage = error.localizedDescription
        }

        isLoading = false
    }
}
