@Observable class ApplicationData {
   var cameraPos: MapCameraPosition = .automatic
   var lastLocation = CLLocation()
   var isAuthorized: Bool = false
   
   static let shared: ApplicationData = ApplicationData()
   private init() {}

   func requestAuthorization() {
      Task {
         do {
            let updates = CLLocationUpdate.liveUpdates()
            for try await update in updates {
               if let loc = update.location {
                  lastLocation = loc
                  
                  if !isAuthorized {
                     let coordinates = CLLocationCoordinate2D(latitude: loc.coordinate.latitude, longitude: loc.coordinate.longitude)
                     let region = MKCoordinateRegion(center: coordinates, latitudinalMeters: 1000, longitudinalMeters: 1000)
                     cameraPos = MapCameraPosition.region(region)
                     isAuthorized = true
                  }
               } else {
                  checkErrors(update: update)
               }
            }
         } catch {
            print("Error: \(error)")
         }
      }
   }
   func checkErrors(update: CLLocationUpdate) {
      if update.authorizationDeniedGlobally {
         print("Error: Authorization denied globally")
         isAuthorized = false
      } else if update.authorizationDenied {
         print("Error: Authorization denied")
         isAuthorized = false
      } else if update.authorizationRestricted {
         print("Error: Authorization restricted")
         isAuthorized = false
      } else if update.accuracyLimited {
         print("Error: Accuracy limited")
         isAuthorized = false
      } else if update.insufficientlyInUse {
         print("Error: Insufficientrly in use")
         isAuthorized = false
      }
   }
}