import { DocReaderOrientation } from "../info/DocReaderScenario";

/**
 * Params that influence the scanning process, camera view controller
 * customization and etc.
 */
export declare class Functionality {
    /**
     * If set to `true`, as soon as document is located during video mode,
     * picture wil be taken and processed as single frame.
     *
     * Used for devices with poor-quality video preview.
     *
     * Android only.
     */
    pictureOnBoundsReady?: boolean;
    /**
     * If it's set to `true`, the button that allows you to turn on/off
     * the torch will be displayed.
     *
     * @default true
     */
    showTorchButton?: boolean;
    /**
     * If it's set to `true`, the button that allows you to close the scanner
     * will be displayed.
     *
     * @default true
     */
    showCloseButton?: boolean;
    /**
     * If it's set to `true`, camera frames won't be taken for recognition
     * while a device is moving based on motion sensors.
     *
     * @default true
     */
    videoCaptureMotionControl?: boolean;
    /**
     * If it's set to `true`, the button that allows you to take a picture
     * and process it as a single frame will be displayed.
     *
     * @default false
     */
    showCaptureButton?: boolean;
    /**
     * @deprecated Not used in new UI
     * If it's set to `true`, the button that allows you to change the camera
     * frame type will be displayed.
     *
     * @default false
     */
    showChangeFrameButton?: boolean;
    /**
     * If it's set to `true`, the button that allows you to skip processing
     * of the next page of a document will be displayed.
     *
     * @default true
     */
    showSkipNextPageButton?: boolean;
    /**
     * If it's set to `true`, allows you to connect to the external
     * Regula Bluetooth devices like Regula 1120 and others.
     */
    useAuthenticator?: boolean;
    /**
     * If it's set to `true`, camera frames won't be taken for recognition
     * while a camera is focusing.
     *
     * @default true
     */
    skipFocusingFrames?: boolean;
    /**
     * If it's set to `true`, the button that allows you to change a position
     * of a capture device for the video session will be displayed.
     *
     * @default false
     */
    showCameraSwitchButton?: boolean;
    /**
     * If it's set to `true`, the metadata will be displayed over the camera
     * preview during document processing, namely the perspective angle value.
     *
     * @default false
     */
    displayMetadata?: boolean;
    /**
     * If it's set to `true`, allows you to adjust a zoom level using the pinch
     * gesture (its range is from 1x to 10x).
     *
     * @default false
     */
    isZoomEnabled?: boolean;
    /**
     * Allows you to disable all validations of having a torch in case Android
     * returns that it's not available, but it can be used when checks are skipped.
     *
     * @default false
     *
     * Android only.
     */
    isCameraTorchCheckDisabled?: boolean;
    /**
     * If set to `true`, video during processing of the document will be recorded.
     * This can be used later for debugging and troubleshooting.
     *
     * @default false
     */
    recordScanningProcess?: boolean;
    /**
     * If it's set to `true`, scanner operate in manual multipage scanning mode.
     * Set this flag to true, if you wanna create for example, custom logic
     * (or UI) between scanning document pages.
     *
     * @default false
     */
    manualMultipageMode?: boolean;
    /**
     * If it's set to `true`, once the scanning process is finished,
     * the scanner will be dismissed.
     *
     * @default true
     *
     * iOS only.
     */
    singleResult?: boolean;
    /**
     * If set, torch (if available) will turn on immediately on camera preview start.
     *
     * @default false
     */
    torchTurnedOn?: boolean;
    /**
     * When enabled, the SDK prevents both screen recording and screenshots.
     *
     * @default false
     */
    preventScreenRecording?: boolean;
    /**
     * If it's set to true, system is allowed to hide the visual indicator for returning to the Home Screen in landscape mode.
     *
     * @default true
     */
    homeIndicatorAutoHide?: boolean;
    /**
     * Android only.
     */
    hideStatusBar?: boolean;
    /**
     * Allows you to specify a time interval when the Capture button
     * has to be displayed after the document is detected.
     * Don't forget to set the {@link showCaptureButton} to `true`,
     * otherwise, it won't be displayed.
     *
     * @default 5
     */
    showCaptureButtonDelayFromDetect?: number;
    /**
     * Allows you to specify a time interval when the Capture button
     * has to be displayed after the scanning process is started.
     * Don't forget to set the {@link showCaptureButton} to `true`,
     * otherwise, it won't be displayed.
     *
     * @default 10
     */
    showCaptureButtonDelayFromStart?: number;
    /**
     * Use the parameter to set the time limit (in seconds) for the RFID chip reading,
     * beyond which it does not continue regardless of its result.
     *
     * Android only.
     */
    rfidTimeout?: number;
    /**
     * Sets a limit on the number of pages to be processed.
     */
    forcePagesCount?: number;
    /**
     * Allows you to specify an orientation of the camera view controller.
     *
     * @default {@link DocReaderOrientation.ALL}
     */
    orientation?: DocReaderOrientation;
    /**
     * Allows you to specify the video processing mode.
     *
     * @default {@link CaptureMode.AUTO}
     */
    captureMode?: CaptureMode;
    /**
     * Allows you to specify the camera API.
     *
     * @default {@link CameraMode.AUTO}
     *
     * Android only.
     */
    cameraMode?: CameraMode;
    /**
     * Allows you to specify a position of a capture device for the video session.
     *
     * @default {@link CameraPosition.UNSPECIFIED}
     *
     * IOS only.
     */
    cameraPositionIOS?: CameraPosition;
    /**
     * Set this setting to override the default cropping frame provided by scenarios.
     *
     * @default {@link DocReaderFrame.SCENARIO_DEFAULT}
     */
    cameraFrame?: DocReaderFrame;
    /**
     * Allows you to specify a name of a Regula device that will be used
     * with Document Reader SDK.
     */
    btDeviceName?: string;
    /**
     * Allows you to set the desired zoom level (its range from 1x to 10x).
     *
     * @default 1.0
     */
    zoomFactor?: number;
    /**
     * Allows you to control exposure.
     *
     * Android only.
     */
    exposure?: number;
    /**
     * Android only.
     */
    videoRecordingSizeDownscaleFactor?: number;
    mdlTimeout?: number;
    /**
     * A list of devices that must not use the camera2 API.
     *
     * Android only.
     *
     * Unmodifiable property. Use setter instead of editing.
     */
    excludedCamera2Models?: string[];
    /**
     * Allows you to specify the frame resolution.
     *
     * Android only. For iOS use {@link cameraResolutionIOS}
     */
    cameraResolutionAndroid?: CameraSize;
    /**
     * Allows you to specify the frame resolution.
     *
     * iOS only. For  Android use {@link cameraResolutionAndroid}
     */
    cameraResolutionIOS?: CaptureSessionPreset;

    /**
     * Allows you to deserialize object.
     * @param jsonObject
     */
    static fromJson(jsonObject: any): Functionality;
}

export declare enum CameraPosition {
    UNSPECIFIED = 0,
    BACK = 1,
    FRONT = 2,
}

export declare enum CaptureMode {
    /** A flow of frames is taken for recognition right after a scenario is started. */
    AUTO = 0,
    /** A flow of frames is taken for recognition right after the Capture button is pushed. */
    CAPTURE_VIDEO = 1,
    /** A single frame is taken for recognition right after the Capture button is pushed. */
    CAPTURE_FRAME = 2,
}

export declare enum CameraMode {
    AUTO = 0,
    CAMERA1 = 1,
    CAMERA2 = 2,
}

export declare enum CaptureSessionPreset {
    /** An AVCaptureSession preset suitable for low quality output. */
    LOW = 0,
    /** An AVCaptureSession preset suitable for medium quality output. */
    MEDIUM = 1,
    /** An AVCaptureSession preset suitable for high quality video and audio output. */
    HIGH = 2,
    /** An AVCaptureSession preset suitable for high resolution photo quality output. */
    PHOTO = 3,
    /**
     * An AVCaptureSession preset indicating that the formats of the session's
     * inputs are being given priority.
     */
    INPUT_PRIORITY = 4,
    /** An AVCaptureSession preset suitable for 1280x720 video output. */
    PRESET_1280x720 = 6,
    /** An AVCaptureSession preset suitable for 1920x1080 video output. */
    PRESET_1920x1080 = 7,
    /** An AVCaptureSession preset suitable for 3840x2160 (UHD 4K) video output. */
    PRESET_3840x2160 = 8,
    /** An AVCaptureSession preset producing 960x540 Apple iFrame video and audio content. */
    FRAME_960x540 = 9,
    /** An AVCaptureSession preset producing 1280x720 Apple iFrame video and audio content. */
    FRAME_1280x720 = 10,
    /** An AVCaptureSession preset suitable for 640x480 video output. */
    PRESET_640x480 = 12,
    /** An AVCaptureSession preset suitable for 352x288 video output. */
    PRESET_352x288 = 13,
}

export declare enum DocReaderFrame {
    /** Size of the frame depends on the scenario, that means default values are used. */
    SCENARIO_DEFAULT = "id1",
    /** Full frame. */
    MAX = "max",
    /** No frame. */
    NONE = "none",
    /**
     * Size of the frame corresponds to the ID-3 format in the portrait mode
     * and to the ID-1 in the landscape mode.
     */
    DOCUMENT = "document",
}

export declare class CameraSize {
    readonly width: number;
    readonly height: number;

    constructor(width: number, height: number);

    /**
     * Allows you to deserialize object.
     * @param jsonObject
     */
    static fromJson(jsonObject: any): CameraSize | null;
}
