import Foundation
#if !targetEnvironment(simulator)
import MLKitFaceDetection
import MLKitVision
#endif
import CoreML
import UIKit
import AVFoundation
import SceneKit

@objc(FaceDetectionConfirmationModule)
public class FaceDetectionConfirmationModule: NSObject {
  #if !targetEnvironment(simulator)
  private var faceDetector: FaceDetector! = nil
  #endif

  public override init() {
    super.init()
    #if !targetEnvironment(simulator)
    let minFaceSize = 0.15
    let optionsBuilder = FaceDetectorOptions()
        optionsBuilder.performanceMode = .fast
        optionsBuilder.landmarkMode = .none
        optionsBuilder.contourMode = .none
        optionsBuilder.classificationMode = .none
        optionsBuilder.minFaceSize = minFaceSize
        optionsBuilder.isTrackingEnabled = false

    faceDetector = FaceDetector.faceDetector(options: optionsBuilder)
    #endif
  }

  func hasFace(path: String) -> Bool {
    #if !targetEnvironment(simulator)
    do {
      let imageURL = URL(string: path);
      let uiImage: UIImage? = UIImage(contentsOfFile: imageURL!.path);
      if(uiImage != nil){
        let image = VisionImage(image: uiImage!)
        image.orientation = uiImage!.imageOrientation;
        let faces: [Face] = try faceDetector!.results(in: image)
        return faces.count > 0
      }else{
        print("Image not present error or path error");
        return false;
      }
    } catch let error {
      print("Error processing face detection: \(error)")
      return false;
    }
    #else
    return false
    #endif
  }
}
