import type { PrivateLoadableFrameData } from "scandit-web-datacapture-core";
import type { AnyDataCaptureActionMessage as CoreAnyDataCaptureActionMessage, CaptureModeDeserializerInstance, DataCaptureActionMessageKey as CoreDataCaptureActionMessageKey, DataCaptureCallbackMessage as CoreDataCaptureCallbackMessage, DataCaptureCallbackMessageKeys as CoreDataCaptureCallbackMessageKeys, EmscriptenClassHandle, Module as CoreModule, Vector, WasmFrameData, WorkerResponse as CoreWorkerResponse } from "scandit-web-datacapture-core/build/js/worker";
import type { AamvaVizBarcodeComparisonResultJSON, CapturedIdJSON, IdCaptureSessionJSON } from "../SerializedTypes";
/**
 * MESSAGES (ACTIONS) SENT TO THE WORKER
 */
export declare type DataCaptureActionMessageKey = CoreDataCaptureActionMessageKey | "idCaptureFrameProcessed" | "idCaptureReset" | "idCaptureSetLastError" | "idCaptureSetLastLocalizedId" | "idCaptureSetLastResult" | "idCaptureVerifyAamvaCapture";
export interface IdCaptureVerifyAamvaCaptureResponse {
    result: AamvaVizBarcodeComparisonResultJSON | null;
}
export declare type WorkerResponse<C extends DataCaptureActionMessageKey> = C extends "idCaptureVerifyAamvaCapture" ? IdCaptureVerifyAamvaCaptureResponse : CoreWorkerResponse<C>;
interface DataCaptureActionMessage {
    command: DataCaptureActionMessageKey;
    id: number;
}
export interface IdCaptureSetLastResultDataCaptureAction extends DataCaptureActionMessage {
    command: "idCaptureSetLastResult";
    result: string;
}
export interface IdCaptureSetLastErrorDataCaptureAction extends DataCaptureActionMessage {
    command: "idCaptureSetLastError";
    error: string;
}
export interface IdCaptureSetLastLocalizedIdDataCaptureAction extends DataCaptureActionMessage {
    command: "idCaptureSetLastLocalizedId";
    localizedId: string;
}
export interface IdCaptureResetDataCaptureAction extends DataCaptureActionMessage {
    command: "idCaptureReset";
}
export interface IdCaptureFrameProcessedDataCaptureAction extends DataCaptureActionMessage {
    command: "idCaptureFrameProcessed";
}
export interface IdCaptureVerifyAamvaCaptureDataCaptureAction extends DataCaptureActionMessage {
    command: "idCaptureVerifyAamvaCapture";
    capturedId: CapturedIdJSON;
}
export declare type AnyDataCaptureActionMessage = CoreAnyDataCaptureActionMessage | IdCaptureFrameProcessedDataCaptureAction | IdCaptureResetDataCaptureAction | IdCaptureSetLastErrorDataCaptureAction | IdCaptureSetLastLocalizedIdDataCaptureAction | IdCaptureSetLastResultDataCaptureAction | IdCaptureVerifyAamvaCaptureDataCaptureAction;
/**
 * MESSAGES EMITTED BY THE WORKER
 */
declare type DataCaptureCallbackMessageKeys = CoreDataCaptureCallbackMessageKeys | "idCaptureDidCaptureId" | "idCaptureDidLocalizeId" | "idCaptureDidRejectId" | "idCaptureForwardFrame";
interface BaseDataCaptureCallbackMessage {
    type: DataCaptureCallbackMessageKeys;
}
interface IdCaptureForwardFrame extends BaseDataCaptureCallbackMessage {
    type: "idCaptureForwardFrame";
    payload: {
        data: Uint8ClampedArray;
        width: number;
        height: number;
    };
}
interface IdCaptureDidCapture extends BaseDataCaptureCallbackMessage {
    type: "idCaptureDidCaptureId";
    payload: {
        session: IdCaptureSessionJSON;
        frameData: PrivateLoadableFrameData;
    };
}
interface IdCaptureDidReject extends BaseDataCaptureCallbackMessage {
    type: "idCaptureDidRejectId";
    payload: {
        session: IdCaptureSessionJSON;
        frameData: PrivateLoadableFrameData;
    };
}
interface IdCaptureDidLocalizeId extends BaseDataCaptureCallbackMessage {
    type: "idCaptureDidLocalizeId";
    payload: {
        session: IdCaptureSessionJSON;
        frameData: PrivateLoadableFrameData;
    };
}
export declare type DataCaptureCallbackMessage = CoreDataCaptureCallbackMessage | IdCaptureDidCapture | IdCaptureDidLocalizeId | IdCaptureDidReject | IdCaptureForwardFrame;
export declare type PayloadByType<T> = T extends "didCaptureId" ? IdCaptureDidCapture["payload"] : T extends "didRejectId" ? IdCaptureDidReject["payload"] : T extends "didLocalizeId" ? IdCaptureDidLocalizeId["payload"] : never;
/**
 * OTHERS
 */
export declare type PayloadForCommand<A, C> = A extends {
    command: C;
} ? A : never;
export interface DataCaptureWorker extends Omit<Worker, "postMessage"> {
    onmessage: ((this: Worker, event_: MessageEvent & {
        data: unknown;
    }) => void) | null;
    postMessage: <C extends AnyDataCaptureActionMessage["command"]>(message: PayloadForCommand<AnyDataCaptureActionMessage, C>, transfer?: Transferable[]) => void;
}
export declare enum IdCaptureBackendErrorType {
    Undefined = "Undefined",
    InitializationError = "InitializationError",
    ParsingError = "ParsingError"
}
export interface IdCaptureBackendError {
    type: IdCaptureBackendErrorType;
    message: string;
}
interface CapturedIdWithOptionals {
    getFirstName: () => OptionalValueHolder<string>;
    getLastName: () => OptionalValueHolder<string>;
    getFullName: () => string;
    getSex: () => OptionalValueHolder<string>;
    getAge: () => OptionalValueHolder<number | null>;
    isExpired: () => OptionalValueHolder<boolean | null>;
    getNationality: () => OptionalValueHolder<string>;
    getAddress: () => OptionalValueHolder<string>;
    getIssuingCountry: () => OptionalValueHolder<string>;
    getIssuingCountryIso: () => OptionalValueHolder<string>;
    getDocumentNumber: () => OptionalValueHolder<string>;
    getDateOfBirth: () => OptionalValueHolder<string>;
    getDateOfExpiry: () => OptionalValueHolder<string>;
    getDateOfIssue: () => OptionalValueHolder<string>;
    getDocumentType: () => string;
    getCapturedResultTypes: () => Vector;
    getImageInfo: () => string | null;
}
interface HasValueHolder<T> {
    has_value: () => true;
    value: () => T;
}
interface HasNoValueHolder {
    has_value: () => false;
}
export declare type OptionalValueHolder<T> = HasNoValueHolder | HasValueHolder<T>;
export interface IdCaptureSessionHolder {
    getCapturedId: () => OptionalValueHolder<CapturedIdWithOptionals>;
    getLocalizedOnlyId: () => OptionalValueHolder<string>;
    getNewlyRejectedId: () => OptionalValueHolder<string>;
    toJson: () => string;
}
export interface SDCIdCaptureMode extends EmscriptenClassHandle {
    reset: () => void;
    addListener: (listener: unknown) => void;
}
interface IdCaptureModule {
    IdCaptureDeserializer: new (helper: unknown) => CaptureModeDeserializerInstance;
    IdCaptureListener: {
        extend: (target: "IdCaptureListener", parameters: {
            onIdCaptured: (barcodeCapture: unknown, session: IdCaptureSessionHolder, frameData: WasmFrameData) => void;
            onIdLocalized: (barcodeCapture: unknown, session: IdCaptureSessionHolder, frameData: WasmFrameData) => void;
            onIdRejected: (barcodeCapture: unknown, session: IdCaptureSessionHolder, frameData: WasmFrameData) => void;
        }) => new () => EmscriptenClassHandle;
    };
    IdCaptureDeserializerListener: {
        extend: (target: "IdCaptureDeserializerListener", parameters: {
            onModeDeserializationStarted: (deserializer: unknown, mode: SDCIdCaptureMode, json: unknown) => void;
            onModeDeserializationFinished: (deserializer: unknown, mode: SDCIdCaptureMode, json: unknown) => void;
            onSettingsDeserializationStarted: (deserializer: unknown, settings: unknown, json: unknown) => void;
            onSettingsDeserializationFinished: (deserializer: unknown, settings: unknown, json: unknown) => void;
        }) => new () => EmscriptenClassHandle;
    };
    IdCaptureBackend: {
        extend: (target: "IdCaptureBackend", parameters: {
            getLastError: () => string;
            getLastResult: () => string;
            getLocalizedOnlyId: () => string;
            processFrame: (data: Uint8ClampedArray, width: number, height: number, format: unknown) => void;
            reset: () => void;
            updateSettings: (settings: unknown) => void;
        }) => new () => {
            delete: () => void;
        };
    };
    IdCaptureDeserializerHelper: {
        extend: (target: "IdCaptureDeserializerHelper", parameters: {
            createMode: (context: unknown, settings: unknown) => SDCIdCaptureMode;
        }) => new () => EmscriptenClassHandle;
    };
    IdCapture: new (context: unknown, idCaptureBackend: unknown, settings: unknown) => SDCIdCaptureMode;
    AamvaVizBarcodeComparisonVerifier: new () => {
        verify: (capturedId: string) => {
            toJson: () => string;
        };
    };
}
export interface Module extends CoreModule, IdCaptureModule {
}
export declare function getValueFromOptional<T, U>(holder: OptionalValueHolder<T>, defaultValue: U): T | U;
export {};
