import UIKit
import MapKit

class ViewController: UIViewController {
   @IBOutlet weak var mapView: MKMapView!
   var manager: CLLocationManager!

   override func viewDidLoad() {
      super.viewDidLoad()
      manager = CLLocationManager()
      manager.requestWhenInUseAuthorization()
      mapView.showsUserLocation = true
   }
   @IBAction func showLocation(_ sender: UIBarButtonItem) {
      let location = mapView.userLocation
      let region = MKCoordinateRegion(center: location.coordinate, latitudinalMeters: 2000, longitudinalMeters: 2000)
      mapView.setRegion(region, animated: true)
      
      Task(priority: .high) {
         await setAnnotations()
      }
   }
   func setAnnotations() async {
      let request = MKLocalSearch.Request()
      request.naturalLanguageQuery = "Pizza"
      request.region = mapView.region

      let search = MKLocalSearch(request: request)
      do {
         let results = try await search.start()
         let items = results.mapItems
         
         await MainActor.run {
            self.mapView.removeAnnotations(self.mapView.annotations)
            for item in items {
               if let coordinates = item.placemark.location?.coordinate {
                  let annotation = MKPointAnnotation()
                  annotation.coordinate = coordinates
                  annotation.title = item.name
                  annotation.subtitle = item.phoneNumber
                  self.mapView.addAnnotation(annotation)
               }
            }
         }
      } catch {
         print("Error: \(error)")
      }
   }
}