import SwiftUI import MapKit @MainActor @Observable final class MapInteractionViewModel { // Default region: Continental US static let defaultRegion = MKCoordinateRegion( center: CLLocationCoordinate2D(latitude: 39.8283, longitude: -98.5795), span: MKCoordinateSpan(latitudeDelta: 35, longitudeDelta: 55) ) // City-level zoom span static let stadiumZoomSpan = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01) var region: MKCoordinateRegion = MapInteractionViewModel.defaultRegion var hasUserInteracted: Bool = false var selectedStadiumId: String? var shouldShowResetButton: Bool { hasUserInteracted } func userDidInteract() { hasUserInteracted = true } func resetToDefault() { Theme.Animation.withMotion(.easeInOut(duration: 0.5)) { region = MapInteractionViewModel.defaultRegion } hasUserInteracted = false selectedStadiumId = nil } func zoomToStadium(at coordinate: CLLocationCoordinate2D) { Theme.Animation.withMotion(.easeInOut(duration: 0.3)) { region = MKCoordinateRegion( center: coordinate, span: MapInteractionViewModel.stadiumZoomSpan ) } hasUserInteracted = true } func selectStadium(id: String, coordinate: CLLocationCoordinate2D) { selectedStadiumId = id zoomToStadium(at: coordinate) } func deselectStadium() { selectedStadiumId = nil } }