import SwiftUI
import Vision

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

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

         Canvas { context, size in
            // Calculate size and draw image
            let image = UIImage(named: "girlclose")!
            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)

            // Show points
            for observation in observations {
               if let landmarks = observation.landmarks {
                  let regions = [landmarks.leftEye, landmarks.rightEye]
                  for region in regions {
                     let points = region.pointsInImageCoordinates(imageFrame.size, origin: .upperLeft)
                     for point in points {
                        let circleFrame = CGRect(x: point.x - 2, y: point.y - 2, width: 4, height: 4)
                        context.fill(Circle().path(in: circleFrame), with: .color(.green))
                     }
                  }
               }
            }
         }
         Spacer()
      }
      .padding()
   }
   func detectEyes() async {
      let imageURL = Bundle.main.url(forResource: "girlclose", withExtension: "png")
      if let imageURL = imageURL {
         do {
            let request = DetectFaceLandmarksRequest()
            observations = try await request.perform(on: imageURL)
         } catch {
            print("Error performing the request: \(error)")
         }
      }
   }
}