import SwiftUI
import Vision

struct ContentView: View {
   @State private var observations: [FaceObservation] = []

   var body: some View {
      VStack {
         Button("Detect") {
            Task {
               await detectFaces()
            }
         }.buttonStyle(.borderedProminent)

         Canvas { context, size in
            // Calculate size and draw image
            let image = UIImage(named: "girlselfie")!
            let width = size.width
            let height = image.size.height * width / image.size.width
            let imageFrame = CGRect(origin: .zero, size: CGSize(width: width, height: height))
            context.draw(Image(uiImage: image), in: imageFrame)

            // Calculate size and draw bounding box
            for observation in observations {
               let rect = observation.boundingBox
               let boxFrame = rect.toImageCoordinates(imageFrame.size, origin: .upperLeft)
               context.stroke(Rectangle().path(in: boxFrame), with: .color(.green), lineWidth: 5)
            }
         }
         Spacer()
      }
      .padding()
   }
   func detectFaces() async {
      let imageURL = Bundle.main.url(forResource: "girlselfie", withExtension: "png")
      if let imageURL = imageURL {
         do {
            let request = DetectFaceRectanglesRequest()
            observations = try await request.perform(on: imageURL)
         } catch {
            print("Error performing the request: \(error)")
         }
      }
   }
}