import { IErrorMessage, IErrorable } from "../core/IErrorable";
import LevelDb from "../minecraft/LevelDb";
import MCWorld from "../minecraft/MCWorld";
import WorldLevelDat from "../minecraft/WorldLevelDat";
import IFile from "../storage/IFile";
import IFolder from "../storage/IFolder";
import CreatorTools from "./CreatorTools";
import { ProjectItemType } from "./IProjectItemData";
import Project from "./Project";
export interface IProjectIntegratorWorld {
    currentFile?: IFile;
    currentManifest?: string;
    levelDatFile?: IProjectIntegratorCandidateFile;
    manifestFiles: IProjectIntegratorCandidateFile[];
    ldbFiles: IProjectIntegratorCandidateFile[];
    logFiles: IProjectIntegratorCandidateFile[];
    seedFromLevelDb?: string | undefined;
}
export interface IProjectIntegratorCandidateFile {
    isUsed?: boolean;
    file: IFile;
    index?: number;
    type: ProjectItemType;
    levelDbSubset?: LevelDb;
    levelDat?: WorldLevelDat;
    mcworld?: MCWorld;
}
export default class ProjectIntegrator implements IErrorable {
    candidateFiles: {
        [storagePath: string]: IProjectIntegratorCandidateFile;
    };
    worlds: IProjectIntegratorWorld[];
    isInErrorState?: boolean;
    errorMessages?: IErrorMessage[];
    private _pushError;
    static createProjectFromFolder(creatorTools: CreatorTools, newProjectName: string, folder: IFolder, operationDescriptor?: string, log?: (message: string) => Promise<void>): Promise<Project | undefined>;
    static extendProjectFromCollectionFolder(creatorTools: CreatorTools, project: Project, folder: IFolder, operationDescriptor?: string, log?: (message: string) => Promise<void>): Promise<void>;
    attachWorldDataToWorlds(): Promise<void>;
    processResults(project: Project, operationDescriptor?: string, log?: (message: string) => Promise<void>): Promise<void>;
    addToWorldByManifestData(world: IProjectIntegratorWorld): Promise<void>;
    addToWorldByFileIds(world: IProjectIntegratorWorld): Promise<void>;
    findLevelDat(world: IProjectIntegratorWorld): Promise<void>;
    copyFilesToWorld(world: IProjectIntegratorWorld, project: Project, worldsFolder: IFolder, index: number): Promise<void>;
    addFromFolder(project: Project, sourceFolder: IFolder, processSubFolders: boolean, log?: (message: string) => Promise<void>): Promise<void>;
    addLooseFiles(project: Project, files: IFile[], log?: (message: string) => Promise<void>): Promise<void>;
    considerCURRENTFile(file: IFile, log?: (message: string) => Promise<void>): Promise<void>;
    static getIndexFromString(fileName: string): number;
    considerMANIFESTFile(file: IFile, log?: (message: string) => Promise<void>): Promise<void>;
}
