//
//  SCManagedStillImageCapturer_Protected.h
//  Snapchat
//
//  Created by Chao Pang on 10/4/16.
//  Copyright © 2016 Snapchat, Inc. All rights reserved.
//

SC_EXTERN_C_BEGIN
extern NSDictionary *cameraInfoForBuffer(CMSampleBufferRef imageDataSampleBuffer);
SC_EXTERN_C_END

extern NSString *const kSCManagedStillImageCapturerErrorDomain;

#if !TARGET_IPHONE_SIMULATOR
extern NSInteger const kSCManagedStillImageCapturerNoStillImageConnection;
#endif
extern NSInteger const kSCManagedStillImageCapturerApplicationStateBackground;

// We will do the image capture regardless if these is still camera adjustment in progress after 0.4 seconds.
extern NSTimeInterval const kSCManagedStillImageCapturerDeadline;
extern NSTimeInterval const kSCCameraRetryInterval;

@protocol SCManagedCapturerLensAPI;

@interface SCManagedStillImageCapturer () {
  @protected
    id<SCManagedCapturerLensAPI> _lensAPI;
    id<SCPerforming> _performer;
    AVCaptureSession *_session;
    id<SCManagedStillImageCapturerDelegate> __weak _delegate;
    NSString *_captureSessionID;
    SCCapturerLightingConditionType _lightingConditionType;
}

- (instancetype)initWithSession:(AVCaptureSession *)session
                      performer:(id<SCPerforming>)performer
             lensProcessingCore:(id<SCManagedCapturerLensAPI>)lensProcessingCore
                       delegate:(id<SCManagedStillImageCapturerDelegate>)delegate;

- (UIImage *)imageFromData:(NSData *)data
         currentZoomFactor:(float)currentZoomFactor
         targetAspectRatio:(CGFloat)targetAspectRatio
               fieldOfView:(float)fieldOfView
                     state:(SCManagedCapturerState *)state
              sampleBuffer:(CMSampleBufferRef)sampleBuffer;

- (UIImage *)imageFromData:(NSData *)data
         currentZoomFactor:(float)currentZoomFactor
         targetAspectRatio:(CGFloat)targetAspectRatio
               fieldOfView:(float)fieldOfView
                     state:(SCManagedCapturerState *)state
                  metadata:(NSDictionary *)metadata;

- (UIImage *)imageFromImage:(UIImage *)image
          currentZoomFactor:(float)currentZoomFactor
          targetAspectRatio:(CGFloat)targetAspectRatio
                fieldOfView:(float)fieldOfView
                      state:(SCManagedCapturerState *)state;

- (CMTime)adjustedExposureDurationForNightModeWithCurrentExposureDuration:(CMTime)exposureDuration;

@end