import IFile from "../storage/IFile";
import IFolder from "../storage/IFolder";
import IStorage from "../storage/IStorage";
import ICreatorToolsData, { CreatorToolsEditorViewMode, RemoteServerAccessLevel, MinecraftFlavor, DedicatedServerMode, MinecraftGameConnectionMode, MinecraftTrack, CreatorToolsEditPreference, ThemePreference } from "./ICreatorToolsData";
import Project from "./Project";
import { ProjectFocus, ProjectScriptLanguage } from "./IProjectData";
import IStatus, { StatusTopic } from "./Status";
import GitHubManager from "../github/GitHubManager";
import IGallery from "./IGallery";
import ILocalUtilities from "../core/ILocalUtilities";
import IMinecraft from "./IMinecraft";
import RemoteMinecraft from "./RemoteMinecraft";
import MinecraftPush from "./MinecraftPush";
import Package from "./Package";
import ZipStorage from "../storage/ZipStorage";
import { ProjectItemType } from "./IProjectItemData";
import IGalleryItem, { GalleryItemType } from "./IGalleryItem";
import DeploymentTarget, { DeploymentTargetType } from "./DeploymentTarget";
export declare enum CreatorToolsMinecraftState {
    none = 0,
    initializing = 1,// for phserver, this is starting to auto-download
    initialized = 2,
    preparing = 3,
    prepared = 4,
    starting = 5,// for phserver, the server is starting
    started = 6,// for phserver, the server is up and ready
    stopping = 7,
    stopped = 8,
    error = 9,
    newMinecraft = 10,
    disconnected = 11
}
export declare enum CreatorToolsMinecraftErrorStatus {
    none = 0,
    actionInProgress = 1,
    serverUnavailable = 2,
    serverError = 3,
    loginFailed = 4,
    generalError = 5,
    configuration = 6
}
export declare const CreatorToolsTargetSettings: string[];
export declare const SidePaneMaxWidth = 880;
export declare const SidePaneMinWidth = 280;
export declare const DefaultCreatorName = "Minecraft Creator";
export default class CreatorTools {
    #private;
    private _isLoaded;
    private _userGitHub;
    private _anonGitHub;
    contentRoot: string;
    processHostedMinecraft: IMinecraft | undefined;
    deploymentStorageMinecraft: IMinecraft | undefined;
    gameMinecraft: IMinecraft | undefined;
    remoteMinecraft: RemoteMinecraft | undefined;
    activeMinecraft: IMinecraft | undefined;
    prefsStorage: IStorage;
    projectsStorage: IStorage;
    deploymentStorage: IStorage[];
    worldStorage: IStorage | null;
    packStorage: IStorage | null;
    workingStorage: IStorage | null;
    deploymentTargets: DeploymentTarget[];
    localFolderExists: ((path: string) => Promise<boolean>) | undefined;
    localFileExists: ((path: string) => Promise<boolean>) | undefined;
    ensureLocalFolder: ((path: string) => IFolder) | undefined;
    createMinecraft: ((flavor: MinecraftFlavor, creatorTools: CreatorTools) => IMinecraft | undefined) | undefined;
    canCreateMinecraft: ((flavor: MinecraftFlavor) => boolean) | undefined;
    private _pendingPackLoadRequests;
    private _arePacksLoading;
    private _remoteServerAuthToken?;
    private _remoteServerEulaAccepted?;
    local: ILocalUtilities | undefined;
    projects: Project[];
    status: IStatus[];
    activeOperations: IStatus[];
    packs?: Package[];
    mcLogs: {
        [name: string]: string[] | undefined;
    };
    _gallery?: IGallery;
    _galleryLoaded: boolean;
    isDeployingToMinecraft: boolean;
    hasAttemptedPersistentBrowserStorageSwitch: boolean;
    private _onDeploymentStorageChanged;
    private _onMinecraftStateChanged;
    private _onMinecraftRefreshed;
    private _onPropertyChanged;
    private _onLoaded;
    private _onStatusAdded;
    private _onOperationCompleted;
    private _onStatusAddedAsync;
    private _onGalleryLoaded;
    get defaultDeploymentTargetType(): DeploymentTargetType;
    set defaultDeploymentTargetType(newType: DeploymentTargetType);
    get isLoaded(): boolean;
    get collapsedTypes(): number[];
    get data(): ICreatorToolsData;
    get defaultDeploymentStorage(): IStorage;
    get defaultDeploymentTarget(): DeploymentTarget;
    set collapsedTypes(newCollapsedTypes: number[]);
    get showMruPane(): boolean;
    set showMruPane(newValue: boolean);
    get mruItemPaths(): string[];
    set mruItemPaths(newPaths: string[]);
    get viewAsFiles(): boolean;
    set viewAsFiles(newValue: boolean);
    /**
     * Adds a project item path to the MRU list.
     * Moves existing entries to front and maintains max 10 items.
     */
    addToMru(projectPath: string): void;
    /**
     * Removes a project item path from the MRU list.
     */
    removeFromMru(projectPath: string): void;
    get editPreference(): CreatorToolsEditPreference | undefined;
    set editPreference(newValue: CreatorToolsEditPreference | undefined);
    get disableFirstRun(): boolean;
    set disableFirstRun(newValue: boolean);
    get themePreference(): ThemePreference | undefined;
    set themePreference(newValue: ThemePreference | undefined);
    get worldSettings(): import("../minecraft/IWorldSettings").IWorldSettings;
    get editorWorldSettings(): import("../minecraft/IWorldSettings").IWorldSettings;
    get activeMinecraftState(): CreatorToolsMinecraftState;
    get onMinecraftStateChanged(): import("ste-events").IEvent<IMinecraft, CreatorToolsMinecraftState>;
    get onDeploymentStorageChanged(): import("ste-events").IEvent<CreatorTools, IStorage>;
    get formatBeforeSave(): boolean;
    set formatBeforeSave(newValue: boolean);
    get showLivePreview(): boolean;
    set showLivePreview(newValue: boolean);
    get conversionJarPath(): string | undefined;
    set conversionJarPath(newValue: string | undefined);
    get preferredTextSize(): number;
    set preferredTextSize(newValue: number);
    get livePreviewWidth(): number;
    set livePreviewWidth(newValue: number);
    get itemSidePaneWidth(): number;
    set itemSidePaneWidth(newValue: number);
    get toolPaneWidth(): number;
    set toolPaneWidth(newValue: number);
    get preferredSuite(): number | undefined;
    set preferredSuite(newValue: number | undefined);
    get track(): MinecraftTrack | undefined;
    set track(newTrack: MinecraftTrack | undefined);
    get effectiveTrack(): MinecraftTrack;
    get useEditor(): boolean | undefined;
    set useEditor(newUseEditor: boolean | undefined);
    get windowX(): number | undefined;
    set windowX(newVal: number | undefined);
    get windowY(): number | undefined;
    set windowY(newVal: number | undefined);
    get windowWidth(): number | undefined;
    set windowWidth(newVal: number | undefined);
    get windowHeight(): number | undefined;
    set windowHeight(newVal: number | undefined);
    get windowSlot(): number | undefined;
    set windowSlot(newVal: number | undefined);
    get creator(): string | undefined;
    set creator(newCreator: string | undefined);
    get windowState(): number | undefined;
    set windowState(newVal: number | undefined);
    get lastActiveMinecraftFlavor(): MinecraftFlavor | undefined;
    set lastActiveMinecraftFlavor(lastActiveMinecraftFlavor: MinecraftFlavor | undefined);
    get remoteServerUrl(): string | undefined;
    get fullRemoteServerUrl(): string;
    set remoteServerUrl(newPath: string | undefined);
    get iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula(): boolean | undefined;
    set iAgreeToTheMinecraftEndUserLicenseAgreementAndPrivacyStatementAtMinecraftDotNetSlashEula(newPort: boolean | undefined);
    get dedicatedServerSlotCount(): number | undefined;
    set dedicatedServerSlotCount(newPort: number | undefined);
    get dedicatedServerMode(): DedicatedServerMode | undefined;
    set dedicatedServerMode(newMode: DedicatedServerMode | undefined);
    get dedicatedServerPath(): string | undefined;
    set minecraftGameMode(newMode: MinecraftGameConnectionMode | undefined);
    get minecraftGameMode(): MinecraftGameConnectionMode | undefined;
    set dedicatedServerPath(newPath: string | undefined);
    get remoteServerPort(): number | undefined;
    set remoteServerPort(newPort: number | undefined);
    get remoteServerAccessLevel(): RemoteServerAccessLevel | undefined;
    set remoteServerAccessLevel(newAccessLevel: RemoteServerAccessLevel | undefined);
    get remoteServerPasscode(): string | undefined;
    set remoteServerPasscode(newPath: string | undefined);
    get remoteServerAuthToken(): string | undefined;
    set remoteServerAuthToken(newToken: string | undefined);
    get remoteServerEulaAccepted(): boolean | undefined;
    set remoteServerEulaAccepted(newValue: boolean | undefined);
    get editorViewMode(): CreatorToolsEditorViewMode;
    set editorViewMode(newViewMode: CreatorToolsEditorViewMode);
    get gallery(): IGallery;
    get galleryLoaded(): boolean;
    get userGitHub(): GitHubManager;
    get anonGitHub(): GitHubManager;
    get onLoaded(): import("ste-events").IEvent<CreatorTools, CreatorTools>;
    get onGalleryLoaded(): import("ste-events").IEvent<CreatorTools, IGallery>;
    get onPropertyChanged(): import("ste-events").IEvent<CreatorTools, string>;
    get onStatusAdded(): import("ste-events").IEvent<CreatorTools, IStatus>;
    get onOperationCompleted(): import("ste-events").IEvent<CreatorTools, number>;
    get successfullyConnectedWebSocketToMinecraft(): boolean;
    set successfullyConnectedWebSocketToMinecraft(newValue: boolean);
    get successfullyStartedMinecraftServer(): boolean;
    set successfullyStartedMinecraftServer(newValue: boolean);
    get successfullyConnectedToRemoteMinecraft(): boolean;
    set successfullyConnectedToRemoteMinecraft(newValue: boolean);
    get defaultMinecraftFlavor(): MinecraftFlavor;
    subscribeStatusAddedAsync(fn: (creatorTools: CreatorTools, status: IStatus) => Promise<void>): void;
    unsubscribeStatusAddedAsync(fn: (creatorTools: CreatorTools, status: IStatus) => Promise<void>): void;
    setMinecraftFlavor(newValue: MinecraftFlavor): void;
    get autoStartMinecraft(): boolean;
    set autoStartMinecraft(newValue: boolean);
    get file(): IFile;
    get prefsProjectsFolder(): IFolder;
    constructor(settingsStorage: IStorage, projectsStorage: IStorage, deploymentsStorage: IStorage[], worldStorage: IStorage | null, packStorage: IStorage | null, workingStorage: IStorage | null, contentRoot: string | null);
    initializeWorldSettings(): void;
    getDeploymentTarget(target: DeploymentTargetType): DeploymentTarget | undefined;
    private ensureDefaultWorldName;
    initializeEditorWorldSettings(): void;
    private ensureDefaultEditorWorldName;
    getCustomTool(index: number): import("./ICustomTool").default;
    get defaultFunction(): string;
    set defaultFunction(newFunction: string);
    runCommand(command: string, project?: Project): Promise<import("./ICommand").ICommandResult>;
    runMinecraftCommand(command: string): Promise<string>;
    loadPacks(): Promise<void>;
    ensureAllTypesCollapsedExcept(itemType: ProjectItemType): void;
    ensureTypeIsCollapsed(itemType: ProjectItemType): void;
    ensureTypeIsNotCollapsed(itemType: ProjectItemType): void;
    loadPacksFromFolder(folder: IFolder): Promise<void>;
    getPackByName(packName: string, isWorldFocused?: boolean): Package;
    getPackageByNameAndHash(packName: string, hash?: string): Package;
    ensurePackForFile(file: IFile): Promise<Package>;
    _ensurePack(storagePath: string): Package;
    _handleMessageFromAppService(command: string, data: string): void;
    _handleLogFileUpdated(fileName: string, contents: string): void;
    notifyStatusUpdate(message: string, topic?: StatusTopic): Promise<void>;
    private ensureStatusArrayIsTrimmed;
    callStatusAddedListeners(status: IStatus): Promise<void>;
    notifyExternalStatus(status: IStatus): number;
    notifyOperationUpdate(updateOperationId: number, message: string, topic?: StatusTopic): Promise<void>;
    notifyOperationStarted(message: string, topic?: StatusTopic): Promise<number>;
    notifyOperationEnded(endedOperationId: number, message?: string, topic?: StatusTopic, endedWithErrors?: boolean): Promise<void>;
    updateOperation(id: number, newMessage: string): void;
    removeOperation(id: number): void;
    save(): Promise<void>;
    loadGallery(): Promise<IGallery>;
    getGalleryProjectByGitHub(repoName: string, owner: string, branch?: string, folder?: string, withFiles?: boolean): Promise<IGalleryItem>;
    getGalleryProjectById(galleryProjectId: string): Promise<IGalleryItem>;
    getGalleryProjectByCaption(galleryProjectTitle: string): Promise<IGalleryItem>;
    getGalleryProjectByType(itemType: GalleryItemType): IGalleryItem[];
    getNewProjectName(seedName: string): Promise<string>;
    createNewProject(newProjectName: string, newProjectPath: string | undefined, newProjectFolder: IFolder | undefined, newProjectFolderTitle: string | undefined, focus: ProjectFocus, includeDefaultItems: boolean, projectLanguage?: ProjectScriptLanguage): Promise<Project>;
    createProjectFromContent(jsonStringOrBase64ZipContent: string): Promise<string | Project>;
    createAndDeployProjectFromPath(path: string): Promise<Project | string | null>;
    createProjectFromPath(path: string): Promise<string | Project>;
    createProjectFromFolder(folder: IFolder): Promise<Project>;
    createProjectFromFolderPath(path: string): Promise<Project>;
    deleteProjectByName(projectName: string): Promise<void>;
    removeProjectByName(projectName: string): Promise<void>;
    removeProject(project: Project): void;
    getProjectByName(projectName: string): Project;
    getProjectByMainLocalFolderPath(localPath: string): Project;
    ensureProjectFromLocalStoragePath(messageProjectPath: string): Promise<Project>;
    ensureProjectForLocalFolder(folderPath: string, newProjectName?: string, openDirect?: boolean): Promise<Project>;
    getExportZip(): Promise<ZipStorage>;
    load(force?: boolean): Promise<void>;
    considerStartingMinecraft(): Promise<void>;
    connectToMinecraft(): Promise<void>;
    canPrepareAndStartMinecraft(): boolean;
    prepareAndStartToMinecraft(push: MinecraftPush): Promise<void>;
    private _bubbleMinecraftRefreshed;
    private _bubbleMinecraftStateChanged;
    ensureRemoteMinecraft(): RemoteMinecraft;
    ensureProcessHostedMinecraft(): IMinecraft;
    ensureDeploymentStorageMinecraft(): IMinecraft;
    ensureGameMinecraft(): IMinecraft;
    ensureMinecraft(flavor: MinecraftFlavor): IMinecraft;
}
