import type {Quadrilateral} from "../core";
import type {SimplifiedBarcodeReaderSettings} from "../dbr";
import type {SimplifiedLabelRecognizerSettings} from "../dlr";
import type {SimplifiedDocumentNormalizerSettings} from "../ddn";

/**
 * The SimplifiedCaptureVisionSettings interface provides a standardized way to adjust a select set of settings for a given CaptureVisionTemplate.
 * @see {@link CaptureVisionRouter.getSimplifiedSettings}
 * @see {@link CaptureVisionRouter.updateSettings}
 * */
export interface SimplifiedCaptureVisionSettings {
    /**
	 * Specifies whether to output the original image.
	 * */
    outputOriginalImage?: boolean;

    /**
     * Designates the region of interest (ROI) within an image,
     * limiting the image processing activities exclusively to this specified area.
     * It is of type {@link Quadrilateral}.
     * */
    roi?: Quadrilateral;

    /**
     * Determines if the coordinates for the region of interest (ROI) are expressed
     * in percentage terms (true) or as exact pixel measurements (false).
     * */
    roiMeasuredInPercentage?: boolean;

    /**
     * Specifies the maximum number of parallel tasks(in native) that can be used for image capture and recognition.
     * */
    maxParallelTasks?:number

    /**
     * Specifies the maximum time (in milliseconds) allowed for image capture and recognition.
     * */
    timeout?: number;

    /**
     * Specifies the shortest time span, in milliseconds, that must elapse between two successive image captures.
     * Opting for a higher interval decreases capture frequency, which can lower the system's processing load and conserve energy.
     * On the other hand, a smaller interval value increases the frequency of image captures, enhancing the system's responsiveness.
     * */
    minImageCaptureInterval?: number;

    /**
     * Specifies the basic settings for the barcode reader module. It is of type {@link SimplifiedBarcodeReaderSettings}.
     * */
    barcodeSettings?: SimplifiedBarcodeReaderSettings;

    /**
     * Specifies the basic settings for the label recognizer module. It is of type {@link SimplifiedLabelRecognizerSettings}.
     * */
    labelSettings?: SimplifiedLabelRecognizerSettings;

    /**
     * Specifies the basic settings for the document normalizer module. It is of type {@link SimplifiedDocumentNormalizerSettings}.
     * */
    documentSettings?: SimplifiedDocumentNormalizerSettings;
}
