import SwiftUI

struct ImagePicker: UIViewControllerRepresentable {
   let sendPicture: (UIImage?) -> Void

   func makeUIViewController(context: Context) -> UIImagePickerController {
      let mediaPicker = UIImagePickerController()
      mediaPicker.delegate = context.coordinator
      if UIImagePickerController.isSourceTypeAvailable(.camera) {
         mediaPicker.sourceType = .camera
         mediaPicker.mediaTypes = ["public.image"]
         mediaPicker.allowsEditing = false
         mediaPicker.cameraCaptureMode = .photo
      } else {
         print("The media is not available")
      }
      return mediaPicker
   }
   func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {}
    
   func makeCoordinator() -> ImagePickerCoordinator {
      ImagePickerCoordinator(sendPicture: sendPicture)
   }
}
class ImagePickerCoordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
   let sendPicture: (UIImage?) -> Void

   init(sendPicture: @escaping (UIImage?) -> Void) {
      self.sendPicture = sendPicture
   }
   func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
      if let newpicture = info[.originalImage] as? UIImage {
         sendPicture(newpicture)
      } else {
         sendPicture(nil)
      }
   }
   func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
      sendPicture(nil)
   }
}