import type {EnumBarcodeFormat} from "./EnumBarcodeFormat";
import type {EnumLocalizationMode} from "./EnumLocalizationMode";
import type {EnumDeblurMode} from "./EnumDeblurMode";
import type {EnumGrayscaleTransformationMode} from "../core/EnumGrayscaleTransformationMode";
import type {EnumGrayscaleEnhancementMode} from "../core/EnumGrayscaleEnhancementMode";

/**
 * This interface defines simplified settings for barcode reading tasks.
 * */
export interface SimplifiedBarcodeReaderSettings {
  /**
   * A combined value of enumeration BarcodeFormat to specify the targeting barcode formats.
   * @see {@link EnumBarcodeFormat}
   * */
  barcodeFormatIds?: EnumBarcodeFormat | bigint;

  /**@internal*/
  _barcodeFormatIdsNumberString?: string;

  /**
   * Set the expected barcode count. The default value is 0.
   * @remarks
   * - Set expectedBarcodesCount to 0 if the barcode count is unknown. The library will try to find at least 1 barcode.
   * - Set expectedBarcodesCount to 1 to reach the highest speed for processing single barcode.
   * - Set expectedBarcodesCount to “n” if there will be “n” barcodes to process from an image.
   * - Set expectedBarcodesCount to the highest expected value if there exists multiple barcodes but the exact count is not confirmed.
   * */
  expectedBarcodesCount?: number;

  /**
   * Set the minimum result confidence to filter out the low confidence results. The default value is 30.
   * */
  minResultConfidence?: number;

  /**
   * Set the minimum barcode text length to filter out the unqualified results.
   * */
  minBarcodeTextLength?: number;

  /**
   * Set the RegEx pattern of the barcode text to filter out the unqualified results.
   * */
  barcodeTextRegExPattern?: string;
  maxThreadsInOneTask?: number;

  /**
   * Set the location modes with an array of enumeration LocalizationMode.
   * View the reference page of LocalizationModes for more detail about location modes.
   * @see {@link EnumLocalizationMode}
   * */
  localizationModes?: Array<EnumLocalizationMode> | Int32Array;

  /**
   * Set the deblur modes with an array of enumeration DeblurMode.
   * View the reference page of DeblurModes for more detail about deblur modes.
   * @see {@link EnumDeblurMode}
   * */
  deblurModes?: Array<EnumDeblurMode> | Int32Array;

  /**
   * Set the grayscale transformation modes with an array of enumeration GrayscaleTransformationMode.
   * View the reference page of GrayscaleTransformationModes for more detail about grayscale transformation modes.
   * @see {@link EnumGrayscaleTransformationMode}
   * */
  grayscaleTransformationModes?: Array<EnumGrayscaleTransformationMode> | Int32Array;

  /**
   * Set the grayscale enhancement modes with an array of enumeration GrayscaleEnhancementMode.
   * View the reference page of GrayscaleEnhancementModes for more detail about grayscale enhancement modes.
   * @see {@link EnumGrayscaleEnhancementMode}
   * */
  grayscaleEnhancementModes?: Array<EnumGrayscaleEnhancementMode> | Int32Array;

  /**
   * Set the threshold for scaling down the input image during barcode localization.
   * If the shorter edge size of the image is larger than this threshold, the original may be scaled down to reduce processing time.
   * The default value is 2300.
   * */
  scaleDownThreshold?: number;
}
