import SwiftUI import SwiftData @MainActor @Observable final class GamesHistoryViewModel { private let modelContext: ModelContext var allVisits: [StadiumVisit] = [] var selectedSports: Set = [] var isLoading = false var error: String? // Computed: visits grouped by year var visitsByYear: [Int: [StadiumVisit]] { let calendar = Calendar.current let filtered = filteredVisits return Dictionary(grouping: filtered) { visit in calendar.component(.year, from: visit.visitDate) } } // Computed: sorted year keys (descending) var sortedYears: [Int] { visitsByYear.keys.sorted(by: >) } // Computed: filtered by selected sports var filteredVisits: [StadiumVisit] { guard !selectedSports.isEmpty else { return allVisits } return allVisits.filter { visit in guard let stadium = AppDataProvider.shared.stadium(for: visit.stadiumId) else { return false } return selectedSports.contains(stadium.sport) } } // Total count var totalGamesCount: Int { filteredVisits.count } init(modelContext: ModelContext) { self.modelContext = modelContext } func loadGames() async { isLoading = true defer { isLoading = false } let descriptor = FetchDescriptor( sortBy: [SortDescriptor(\.visitDate, order: .reverse)] ) do { allVisits = try modelContext.fetch(descriptor) } catch { self.error = "Failed to load games: \(error.localizedDescription)" allVisits = [] } } func toggleSport(_ sport: Sport) { if selectedSports.contains(sport) { selectedSports.remove(sport) } else { selectedSports.insert(sport) } } func clearFilters() { selectedSports.removeAll() } }