import { DownloadContext } from '../context';
import { DownloadChunk, DownloadFile } from '../models';
import { IDownloadChunksRepository, IDownloadFilesRepository } from '../repositories';
import { IStorage } from '../storage';
import { ILocker, ILogger, IRetrier } from '../utilities';
import { BackgroundJob } from './BackgroundJob';

export declare class FileChunkAssembler extends BackgroundJob {
    private filesRepo;
    private chunksRepo;
    private storage;
    private locker;
    private retrier;
    static readonly type: string;
    constructor(filesRepo: IDownloadFilesRepository, chunksRepo: IDownloadChunksRepository, storage: IStorage, locker: ILocker, retrier: IRetrier, logger: ILogger, context: DownloadContext);
    static logsProvider: {
        error: {
            failedToAssembleFile: (file: DownloadFile, chunks: DownloadChunk[]) => string;
            fileIsNotCompletelyChunked: (file: DownloadFile) => string;
            fileProgressIsLessThanSize: (file: DownloadFile) => string;
            someChunksAreNotProcessed: (file: DownloadFile, chunks: DownloadChunk[]) => string;
            totalSizeOfChunksDoesNotEqualFileSize: (file: DownloadFile, totalChunksSize: number, chunks: DownloadChunk[]) => string;
        };
        info: {
            fileAssembled: (file: DownloadFile) => string;
        };
    };
    protected processInternal(signal: AbortSignal): Promise<void>;
}
