import { Color, CameraSettings, MeasureUnit, TorchState, CameraPosition, CameraSettingsJSON } from '@scandit/web-datacapture-core';
import { CameraSettingsDefaultsJSON } from '@scandit/web-datacapture-core/build/js/Defaults';
import { BarcodeFindViewSettings, BarcodeFindViewSettingsJSON } from './find/BarcodeFindViewSettings.js';
import { Symbology, PrivateCompositeTypeDescription } from './Barcode.js';
import { SymbologyDescription } from './SymbologyDescription.js';
import { SymbologySettings } from './SymbologySettings.js';
import { SparkScanMiniPreviewSize } from './spark/ui/SparkScanMiniPreviewSize.js';
import { SparkScanViewHandMode } from './spark/ui/SparkScanViewHandMode.js';
import '@scandit/web-datacapture-core/build/js/private/Serializable';
import './EncodingRange.js';
import './StructuredAppendData.js';
import './Range.js';

type BarcodeCaptureOverlayStyle = any;
type BarcodeBatchBasicOverlayStyle = any;
interface Defaults {
    SymbologySettings: {
        [key in Symbology]: SymbologySettings;
    };
    SymbologyDescriptions: SymbologyDescription[];
    CompositeTypeDescriptions: PrivateCompositeTypeDescription[];
    BarcodeCapture: {
        BarcodeCaptureOverlay: {
            DefaultBrush: {
                fillColor: Color;
                strokeColor: Color;
                strokeWidth: number;
            };
            styles: {
                [key in BarcodeCaptureOverlayStyle]: {
                    DefaultBrush: {
                        fillColor: Color;
                        strokeColor: Color;
                        strokeWidth: number;
                    };
                };
            };
        };
        BarcodeCaptureSettings: {
            codeDuplicateFilter: number;
        };
        RecommendedCameraSettings: CameraSettings;
    };
    BarcodeBatch: {
        BarcodeBatchBasicOverlay: {
            defaultStyle: BarcodeBatchBasicOverlayStyle;
            DefaultBrush: {
                fillColor: Color;
                strokeColor: Color;
                strokeWidth: number;
            };
            styles: {
                [key in BarcodeBatchBasicOverlayStyle]: {
                    DefaultBrush: {
                        fillColor: Color;
                        strokeColor: Color;
                        strokeWidth: number;
                    };
                };
            };
        };
        RecommendedCameraSettings: CameraSettings;
    };
    BarcodeFind: {
        CameraSettings: {
            hiddenProperties: {
                exposureTargetBias: number;
                grayScaleFrameReader: boolean;
            };
            settings: CameraSettings;
        };
        BarcodeFindViewSettings: {
            settings: BarcodeFindViewSettings;
        };
    };
    SparkScan: {
        SparkScanFeedback: {
            errorVibrationPattern: number[];
        };
        SparkScanSettings: {
            codeDuplicateFilter: number;
            locationSelection: {
                radius: number;
                unit: MeasureUnit;
            };
            targetModeLocationSelection: {
                radius: number;
                unit: MeasureUnit;
            };
        };
        SparkScanOverlay: {
            defaultStyle: BarcodeBatchBasicOverlayStyle;
            DefaultBrush: {
                fillColor: Color;
                strokeColor: Color;
                strokeWidth: number;
            };
        };
        CameraSettings: {
            settings: CameraSettings;
            hiddenProperties: {
                exposureTargetBias: number;
                repeatedTriggerInterval: number;
                grayScaleFrameReader: boolean;
            };
        };
        SparkScanViewSettings: {
            triggerButtonCollapseTimeout: number;
            defaultHandMode: SparkScanViewHandMode;
            defaultTorchState: TorchState;
            defaultMiniPreviewSize: SparkScanMiniPreviewSize;
            defaultCameraPosition: CameraPosition;
            soundEnabled: boolean;
            hapticEnabled: boolean;
            holdToScanEnabled: boolean;
            visualFeedbackEnabled: boolean;
            inactiveStateTimeout: number;
            zoomFactorOut: number;
            zoomFactorIn: number;
        };
    };
    SparkCapture: {
        SparkCaptureSettings: {
            codeDuplicateFilter: number;
        };
    };
}
interface DefaultsJSON {
    SymbologySettings: {
        [key in Symbology]: string;
    };
    SymbologyDescriptions: string[];
    CompositeTypeDescriptions: string[];
    BarcodeCapture: {
        BarcodeCaptureOverlay: {
            DefaultBrush: {
                fillColor: string;
                strokeColor: string;
                strokeWidth: number;
            };
            styles: Record<string, {
                DefaultBrush: {
                    fillColor: string;
                    strokeColor: string;
                    strokeWidth: number;
                };
            }>;
        };
        BarcodeCaptureSettings: {
            codeDuplicateFilter: number;
        };
        RecommendedCameraSettings: CameraSettingsDefaultsJSON;
    };
    BarcodeBatch: {
        BarcodeBatchBasicOverlay: {
            defaultStyle: BarcodeBatchBasicOverlayStyle;
            DefaultBrush: {
                fillColor: string;
                strokeColor: string;
                strokeWidth: number;
            };
            styles: Record<string, {
                DefaultBrush: {
                    fillColor: string;
                    strokeColor: string;
                    strokeWidth: number;
                };
            }>;
        };
        RecommendedCameraSettings: CameraSettingsDefaultsJSON;
    };
    BarcodeFind: {
        CameraSettings: {
            hiddenProperties: {
                exposureTargetBias: number;
                grayScaleFrameReader: boolean;
            };
            settings: CameraSettingsDefaultsJSON;
        };
        BarcodeFindViewSettings: {
            settings: BarcodeFindViewSettingsJSON;
        };
    };
    SparkScan: {
        SparkScanFeedback: {
            errorVibrationPattern: number[];
        };
        SparkScanSettings: {
            codeDuplicateFilter: number;
            locationSelection: {
                radius: number;
                unit: MeasureUnit;
            };
            targetModeLocationSelection: {
                radius: number;
                unit: MeasureUnit;
            };
        };
        SparkScanOverlay: {
            defaultStyle: BarcodeBatchBasicOverlayStyle;
            DefaultBrush: {
                fillColor: string;
                strokeColor: string;
                strokeWidth: number;
            };
        };
        CameraSettings: {
            settings: CameraSettingsJSON;
            hiddenProperties: {
                exposureTargetBias: number;
                repeatedTriggerInterval: number;
                grayScaleFrameReader: boolean;
            };
        };
        SparkScanViewSettings: {
            triggerButtonCollapseTimeout: number;
            defaultHandMode: SparkScanViewHandMode;
            defaultTorchState: TorchState;
            defaultMiniPreviewSize: SparkScanMiniPreviewSize;
            defaultCameraPosition: CameraPosition;
            soundEnabled: boolean;
            hapticEnabled: boolean;
            holdToScanEnabled: boolean;
            visualFeedbackEnabled: boolean;
            inactiveStateTimeout: number;
            zoomFactorOut: number;
            zoomFactorIn: number;
        };
    };
    SparkCapture: {
        SparkCaptureSettings: {
            codeDuplicateFilter: number;
        };
    };
}
declare const defaultsFromJSON: (json: DefaultsJSON) => Defaults;
declare let defaultValues: Defaults;
declare function setDefaults(newDefaults: Defaults): void;

export { type Defaults, type DefaultsJSON, defaultValues, defaultsFromJSON, setDefaults };
