import { Dispatcher, Module } from '@nu-art/ts-common';
import { ApiDef, ApiDefCaller, BaseHttpRequest, TypedApi } from '@nu-art/thunderstorm';
import { ApiStruct_AssetUploader, DB_Asset, FileStatus, OnFileStatusChanged, TempSignedUrl, UI_Asset } from '../../shared';
import { OnPushMessageReceived } from '@nu-art/push-pub-sub/frontend';
import { PushMessage_Payload } from '@nu-art/push-pub-sub';
import { PushMessage_FileUploaded } from '../assets/messages';
export type FilesToUpload = UI_Asset & {
    file: any;
};
export type FileInfo = {
    status: FileStatus;
    messageStatus?: string;
    progress?: number;
    name: string;
    request?: BaseHttpRequest<any>;
    file?: any;
    asset?: DB_Asset;
};
export type UploaderConfig = {
    manualProcessTriggering: boolean;
    uploadQueueParallelCount?: number;
};
export declare abstract class ModuleBase_AssetUploader<Config extends UploaderConfig = UploaderConfig> extends Module<Config> implements OnPushMessageReceived<PushMessage_FileUploaded> {
    protected vv1: ApiDefCaller<ApiStruct_AssetUploader>['vv1'];
    protected files: {
        [id: string]: FileInfo;
    };
    private readonly uploadQueue;
    protected readonly dispatch_fileStatusChange: Dispatcher<OnFileStatusChanged, "__onFileStatusChanged", [id: string], void>;
    protected constructor();
    __onMessageReceived(notification: PushMessage_Payload<PushMessage_FileUploaded>): void;
    init(): void;
    protected abstract subscribeToPush(toSubscribe: TempSignedUrl[]): 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>(feId: string, values: Partial<FileInfo>): void;
    protected dispatchFileStatusChange(id: string): void;
    uploadImpl(files: FilesToUpload[]): UI_Asset[];
    private uploadFiles;
    private uploadFile;
    processAssetManually: (feId?: string) => void;
    protected abstract createRequest<API extends TypedApi<any, any, any, any>>(uploadFile: ApiDef<API>): BaseHttpRequest<API>;
}
