import { Module } from "@intuitionrobotics/ts-common";
import { BaseHttpModule_Class, BaseHttpRequest } from "@intuitionrobotics/thunderstorm";
import { BaseUploaderFile, DB_Temp_File, Request_Uploader, TempSecureUrl } from "../../shared/types";
export declare enum FileStatus {
    ObtainingUrl = "ObtainingUrl",
    UrlObtained = "UrlObtained",
    UploadingFile = "UploadingFile",
    PostProcessing = "PostProcessing",
    Completed = "Completed",
    Error = "Error"
}
export type FileInfo = {
    status: FileStatus;
    messageStatus?: string;
    progress?: number;
    name: string;
    request?: BaseHttpRequest<any>;
    file?: any;
    fileName?: string;
    tempDoc?: DB_Temp_File;
    statusCallBack: (feId: string, status: FileStatus) => void;
};
export type FilesToUpload = Request_Uploader & {
    file: any;
    onFileStatusChanged: (feId: string, status: FileStatus) => void;
};
type Config = {
    uploadQueueParallelCount?: number;
};
export declare abstract class BaseUploaderModule_Class<HttpModule extends BaseHttpModule_Class, CustomConfig extends object = {}> extends Module<Config & CustomConfig> {
    protected files: {
        [id: string]: FileInfo;
    };
    private readonly uploadQueue;
    private httpModule;
    protected constructor(httpModule: HttpModule, moduleName: string);
    init(): void;
    protected abstract subscribeToPush(toSubscribe: TempSecureUrl[]): Promise<void>;
    getFileInfo<K extends keyof FileInfo>(id: string, key: K): FileInfo[K] | undefined;
    getFullFileInfo(id: string): FileInfo | undefined;
    protected setFileInfo<K extends keyof FileInfo>(id: string, key: K, value: FileInfo[K]): void;
    uploadImpl(files: FilesToUpload[]): BaseUploaderFile[];
    private uploadFiles;
    private uploadFile;
}
export {};
