import type { Symbology } from "../Barcode";
import type { BarcodeCaptureSessionJSON } from "../BarcodeCaptureSession";
import type { PrivateLoadableFrameData } from "scandit-web-datacapture-core";
import type { AnyDataCaptureActionMessage as CoreAnyDataCaptureActionMessage, DataCaptureActionMessageKey as CoreDataCaptureActionMessageKey, DataCaptureCallbackMessageKeys as CoreDataCaptureCallbackMessageKeys, DataCaptureCallbackMessage as CoreDataCaptureCallbackMessage, CaptureModeDeserializerInstance, JSONParseable, Module as CoreModule, DataCaptureContext, WorkerResponse as CoreWorkerResponse, WasmFrameData } from "scandit-web-datacapture-core/build/js/worker";
/**
 * MESSAGES (ACTIONS) SENT TO THE WORKER
 */
export declare type DataCaptureActionMessageKey = CoreDataCaptureActionMessageKey | "createBlurryTable";
export declare type WorkerResponse<C extends DataCaptureActionMessageKey> = CoreWorkerResponse<C>;
interface DataCaptureActionMessage {
    command: DataCaptureActionMessageKey;
    id: number;
}
export interface CreateBlurryTableDataCaptureAction extends DataCaptureActionMessage {
    command: "createBlurryTable";
    symbology: Symbology;
}
export declare type AnyDataCaptureActionMessage = CoreAnyDataCaptureActionMessage | CreateBlurryTableDataCaptureAction;
/**
 * MESSAGES EMITTED BY THE WORKER
 */
declare type DataCaptureCallbackMessageKeys = CoreDataCaptureCallbackMessageKeys | "barcodeCaptureDidScan" | "barcodeCaptureDidUpdateSession" | "createBlurryTableResult";
interface BaseDataCaptureCallbackMessage {
    type: DataCaptureCallbackMessageKeys;
}
interface BarcodeCaptureDidScanWorkerMessage extends BaseDataCaptureCallbackMessage {
    type: "barcodeCaptureDidScan";
    payload: {
        session: BarcodeCaptureSessionJSON;
        frameData: PrivateLoadableFrameData;
    };
}
interface BarcodeCaptureDidUpdateSessionWorkerMessage extends BaseDataCaptureCallbackMessage {
    type: "barcodeCaptureDidUpdateSession";
    payload: BarcodeCaptureSessionJSON;
}
interface CreateBlurryTableResultWorkerMessage extends BaseDataCaptureCallbackMessage {
    type: "createBlurryTableResult";
    payload: {
        symbology: Symbology;
    };
}
export declare type DataCaptureCallbackMessage = BarcodeCaptureDidScanWorkerMessage | BarcodeCaptureDidUpdateSessionWorkerMessage | CoreDataCaptureCallbackMessage | CreateBlurryTableResultWorkerMessage;
/**
 * 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: any;
    }) => void) | null;
    postMessage: <C extends AnyDataCaptureActionMessage["command"]>(message: PayloadForCommand<AnyDataCaptureActionMessage, C>, transfer?: Transferable[]) => void;
}
interface BarcodeCaptureModule {
    BarcodeCaptureDeserializer: new () => CaptureModeDeserializerInstance;
    BarcodeCaptureListener: {
        extend: (target: "BarcodeCaptureListener", parameters: {
            didScan: (barcode_capture: any, session: JSONParseable, frame_data: WasmFrameData) => void;
            didUpdateSession: (barcode_capture: any, session: JSONParseable, frame_data: any) => void;
        }) => new () => any;
    };
    BarcodeCaptureDeserializerListener: {
        extend: (target: "BarcodeCaptureDeserializerListener", parameters: {
            onModeDeserializationStarted: (deserializer: any, mode: any, json: any) => void;
            onModeDeserializationFinished: (deserializer: any, mode: any, json: any) => void;
            onSettingsDeserializationStarted: (deserializer: any, settings: any, json: any) => void;
            onSettingsDeserializationFinished: (deserializer: any, settings: any, json: any) => void;
        }) => new () => any;
    };
    BlurryTableCreator: {
        createTables: (context: DataCaptureContext, symbology: Symbology) => void;
    };
    LicenseUtils: {
        getBlinkIdLicenseKey: (scanditLicense: string) => string;
    };
}
export interface Module extends CoreModule, BarcodeCaptureModule {
}
export {};
