//
//  CameraView+focus.swift
//  Cuvent
//
//  Created by Marc Rousavy on 19.02.21.
//  Copyright © 2021 Facebook. All rights reserved.
//

import Foundation

extension CameraView {
  
  func focus(point: CGPoint, promise: Promise) {
    withPromise(promise) {
      guard let device = self.videoDeviceInput?.device else {
        throw CameraError.session(SessionError.cameraNotReady)
      }
      if !device.isFocusPointOfInterestSupported {
        throw CameraError.device(DeviceError.focusNotSupported)
      }
      
      let normalizedPoint = self.videoPreviewLayer.captureDevicePointConverted(fromLayerPoint: point)
      
      do {
        try device.lockForConfiguration()
        
        device.focusPointOfInterest = normalizedPoint
        device.focusMode = .continuousAutoFocus
        
        if device.isExposurePointOfInterestSupported {
          device.exposurePointOfInterest = normalizedPoint
          device.exposureMode = .continuousAutoExposure
        }
        
        device.unlockForConfiguration()
        return nil
      } catch {
        throw CameraError.device(DeviceError.configureError)
      }
    }
  }
}