import IFile from "../storage/IFile";
import IFolder from "../storage/IFolder";
import CreatorTools from "./CreatorTools";
import IProjectData, { ProjectEditPreference, ProjectRole, ProjectScriptLanguage, ProjectScriptVersion } from "./IProjectData";
import { ProjectFocus } from "./IProjectData";
import ProjectItem, { IProjectItemContentUpdateEvent } from "./ProjectItem";
import IProjectItemData, { ProjectItemCreationType, ProjectItemStorageType, ProjectItemType } from "./IProjectItemData";
import DifferenceSet from "../storage/DifferenceSet";
import IProjectScriptState from "./IProjectScriptState";
import IStorage, { IFileUpdateEvent, IFolderMove } from "../storage/IStorage";
import LocManager from "../minecraft/LocManager";
import ProjectInfoSet from "../info/ProjectInfoSet";
import ProjectUpdateResult from "../updates/ProjectUpdateResult";
import { StatusTopic, StatusType } from "./Status";
import Pack, { PackType } from "../minecraft/Pack";
import { IErrorable } from "../core/IErrorable";
import { MinecraftTrack } from "./ICreatorToolsData";
import ISimpleReference from "../dataform/ISimpleReference";
import ProjectVariant from "./ProjectVariant";
import IVersionContent from "../storage/IVersionContent";
export declare enum ProjectAutoDeploymentMode {
    deployOnSave = 0,
    noAutoDeployment = 1
}
export declare enum ProjectErrorState {
    noError = 0,
    projectFolderOrFileDoesNotExist = 1,
    cabinetFileCouldNotBeProcessed = 2
}
export declare enum FolderContext {
    unknown = 0,
    behaviorPack = 1,
    resourcePack = 2,
    skinPack = 3,
    docs = 4,
    world = 5,
    typeDefs = 6,
    distBuildFolder = 7,
    vscodeFolder = 8,
    resourcePackSubPack = 9,
    metaData = 10,
    libFolder = 11,
    persona = 12,
    mctoolsWorkingFolder = 13,
    designPack = 14
}
export declare const ProjectTargetStrings: string[];
export declare const AUTOGENERATED_CONTENT_TOKEN = "==== AUTOGENERATED";
export declare const AUTOGENERATED_JS_SEPARATOR = "\n// ===== AUTOGENERATED CONTENT ===== CONTENT AT OR BELOW THIS LINE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING";
export declare const AUTOGENERATED_WHOLEFILE_JS_SEPARATOR = "// ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING";
export declare const AUTOGENERATED_WHOLEFILE_MCFUNCTION_SEPARATOR = "# ===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING";
export declare const AUTOGENERATED_WHOLEFILE_GENERAL_SEPARATOR = "===== AUTOGENERATED FILE ===== CONTENT WITHIN THIS FILE WILL BE WIPED AND UPDATED WHEN USED IN TOOLING";
export declare const minecraftScriptModules: {
    id: string;
    module_name?: string;
    uuid?: string;
    preferredVersion: string | number[];
}[];
export declare const remappedMinecraftScriptModules: {
    [oldModuleName: string]: string;
};
export declare const vanillaSliceFolderSeeds: string[];
export default class Project {
    #private;
    loc: LocManager;
    differencesFromGitHub?: DifferenceSet;
    /** Transient action to perform after this project first opens in the editor (not persisted). */
    pendingPostCreateAction?: string;
    /** Transient content definition to generate after this project first opens in the editor (not persisted). */
    pendingContentDefinition?: any;
    /** Debounce time for external file changes in milliseconds */
    static readonly EXTERNAL_CHANGE_DEBOUNCE_MS = 500;
    docsContainer: IFolder | null;
    worldContainer: IFolder | null;
    behaviorPacksContainer: IFolder | null;
    defaultBehaviorPackFolder: IFolder | null;
    skinPacksContainer: IFolder | null;
    defaultSkinPackFolder: IFolder | null;
    personaPacksContainer: IFolder | null;
    defaultPersonaPackFolder: IFolder | null;
    designPacksContainer: IFolder | null;
    defaultDesignPackFolder: IFolder | null;
    projectItemAccessoryFolder: IFolder | null;
    defaultWorldFolder: IFolder | null;
    resourcePacksContainer: IFolder | null;
    defaultResourcePackFolder: IFolder | null;
    creationTime: number;
    changedFilesSinceLastSaved: {
        [storagePath: string]: IFile | undefined;
    };
    private _onPropertyChanged;
    private _onLoaded;
    private _onInflated;
    private _onSaved;
    private _onNeedsSaveChanged;
    private _onItemChanged;
    private _onItemContentChanged;
    private _onItemAdded;
    private _onItemRemoved;
    variants: {
        [label: string]: ProjectVariant;
    };
    hasInferredFiles: boolean;
    get unknownFiles(): IFile[];
    private _unknownFiles;
    addUnknownFile(file: IFile): void;
    get hasMultiplePacksOfSameType(): boolean;
    get readOnlySafety(): boolean;
    set readOnlySafety(newReadOnly: boolean);
    get creatorTools(): CreatorTools;
    /**
     * Get the project data for persistence.
     * This includes chat session and other project metadata.
     */
    get projectData(): IProjectData;
    get role(): ProjectRole;
    set role(newRole: ProjectRole);
    get errorState(): ProjectErrorState;
    get errorMessage(): string;
    get preferencesFile(): IFile;
    get accessoryFolders(): IFolder[] | null;
    set accessoryFolders(folders: IFolder[] | null);
    get accessoryFilePaths(): string[] | undefined;
    set accessoryFilePaths(files: string[] | undefined);
    get indevInfoSet(): ProjectInfoSet;
    get collapsedStoragePaths(): string[];
    set collapsedStoragePaths(newCollapsedPaths: string[]);
    get packs(): Pack[];
    hasUnsavedChanges(): boolean;
    getBehaviorPackCount(): number;
    getResourcePackCount(): number;
    getIsPackFolderManaged(): boolean;
    get key(): string;
    get containerName(): string;
    get defaultNamespace(): string | undefined;
    get effectiveDefaultNamespace(): string;
    set defaultNamespace(newDefaultNamespace: string | undefined);
    get scriptEntryPoint(): string;
    set scriptEntryPoint(newScriptEntryPoint: string);
    get worldSettings(): import("../minecraft/IWorldSettings").IWorldSettings;
    get editorWorldSettings(): import("../minecraft/IWorldSettings").IWorldSettings;
    get isMinecraftCreator(): boolean;
    getLookupChoices(lookupId: string): Promise<ISimpleReference[] | undefined>;
    ensureWorldSettings(): import("../minecraft/IWorldSettings").IWorldSettings;
    ensureEditorWorldSettings(): import("../minecraft/IWorldSettings").IWorldSettings;
    get usesCustomWorldSettings(): boolean | undefined;
    set usesCustomWorldSettings(newValue: boolean | undefined);
    get isLoaded(): boolean;
    get isInflated(): boolean;
    get isRelationsProcessed(): boolean;
    get distBuildFolder(): IFolder | null;
    set distBuildFolder(folder: IFolder | null);
    get libFolder(): IFolder | null;
    set libFolder(folder: IFolder | null);
    get distScriptsFolder(): IFolder;
    get libScriptsFolder(): IFolder;
    get useProjectNameInRootProjectStorage(): boolean;
    set useProjectNameInRootProjectStorage(newVal: boolean);
    get onPropertyChanged(): import("ste-events").IEvent<Project, string>;
    get onLoaded(): import("ste-events").IEvent<Project, Project>;
    get onInflated(): import("ste-events").IEvent<Project, Project>;
    get onSaved(): import("ste-events").IEvent<Project, Project>;
    get onNeedsSaveChanged(): import("ste-events").IEvent<Project, Project>;
    get onItemChanged(): import("ste-events").IEvent<Project, ProjectItem>;
    get onItemContentChanged(): import("ste-events").IEvent<Project, IProjectItemContentUpdateEvent>;
    get onItemAdded(): import("ste-events").IEvent<Project, ProjectItem>;
    get onItemRemoved(): import("ste-events").IEvent<Project, ProjectItem>;
    get projectFolderTitle(): string | undefined;
    set projectFolderTitle(newTitle: string | undefined);
    get projectFolder(): IFolder | null;
    get accessoryFoldersForFilePaths(): IFolder[] | null;
    get localFolderPath(): string | undefined;
    set localFolderPath(newPath: string | undefined);
    get mainDeployFolderPath(): string | undefined;
    set mainDeployFolderPath(newPath: string | undefined);
    get localFilePath(): string | undefined;
    set localFilePath(newPath: string | undefined);
    get items(): ProjectItem[];
    get gitHubReferences(): import("./IGitHubInfo").default[];
    getBehaviorPackScriptsFolder(): Promise<IFolder>;
    ensureBehaviorPackScriptsFolder(): Promise<IFolder>;
    getMainScriptsFolder(): Promise<IFolder>;
    ensureProjectItemAccessoryFolder(): Promise<IFolder>;
    ensureMainScriptsFolder(): Promise<IFolder>;
    ensureScriptGenFolder(): Promise<IFolder>;
    get preferredScriptLanguage(): ProjectScriptLanguage;
    set preferredScriptLanguage(newLanguage: ProjectScriptLanguage);
    get scriptVersion(): ProjectScriptVersion;
    get messages(): import("./Status").default[];
    set scriptVersion(newVersion: ProjectScriptVersion);
    get effectiveEditPreference(): ProjectEditPreference.summarized | ProjectEditPreference.editors | ProjectEditPreference.raw;
    get editPreference(): ProjectEditPreference;
    set editPreference(newEditPreference: ProjectEditPreference);
    get contentsModified(): Date;
    get created(): Date | null;
    set created(value: Date | null);
    get lastOpened(): Date | null;
    set lastOpened(value: Date | null);
    getItemsCopy(): ProjectItem[];
    getItemsByType(itemType: ProjectItemType): ProjectItem[];
    initializeWorldSettings(): void;
    private ensureDefaultWorldName;
    initializeEditorWorldSettings(): void;
    private ensureDefaultEditorWorldName;
    addMessage(message: string, context?: string, operation?: string, type?: StatusType, topic?: StatusTopic): void;
    appendErrors(errorable: IErrorable, operation?: string): void;
    removeItem(item: ProjectItem): void;
    updateContentsModified(): void;
    get modified(): Date | null;
    get effectiveShowHiddenItems(): boolean;
    get showDevFiles(): boolean;
    set showDevFiles(show: boolean);
    get showHiddenItems(): boolean;
    set showHiddenItems(showItems: boolean);
    get showFunctions(): boolean;
    set showFunctions(showFunctions: boolean);
    get showAssets(): boolean;
    set showAssets(showAssets: boolean);
    get showTypes(): boolean;
    set showTypes(showTypes: boolean);
    get name(): string;
    get simplifiedName(): string;
    set name(newName: string);
    get lastMapDeployedHash(): string | undefined;
    get lastMapDeployedDate(): Date | undefined;
    set lastMapDeployedHash(newValue: string | undefined);
    set lastMapDeployedDate(newValue: Date | undefined);
    get deployWorldId(): string;
    set deployWorldId(newValue: string);
    get previewImageBase64(): string | undefined;
    set previewImageBase64(newValue: string | undefined);
    get effectiveCreator(): string;
    get effectiveShortName(): string;
    get shortName(): string | undefined;
    set shortName(newShortName: string | undefined);
    get creator(): string | undefined;
    set creator(newCreator: string | undefined);
    get title(): string;
    set title(newTitle: string);
    get track(): MinecraftTrack | undefined;
    set track(newTrack: MinecraftTrack | undefined);
    get effectiveTrack(): MinecraftTrack;
    set originalFullPath(newOriginalPath: string | undefined);
    get originalFullPath(): string | undefined;
    set originalFileList(newFileList: string[] | undefined);
    get originalFileList(): string[] | undefined;
    set originalGitHubOwner(newGitHubOwner: string | undefined);
    set originalGalleryId(newGalleryId: string | undefined);
    get originalGalleryId(): string | undefined;
    set originalSampleId(newSampleId: string | undefined);
    get originalSampleId(): string | undefined;
    get originalGitHubOwner(): string | undefined;
    set originalGitHubFolder(newGitHubFolder: string | undefined);
    get originalGitHubFolder(): string | undefined;
    set originalGitHubRepoName(newGitHubRepoName: string | undefined);
    get originalGitHubRepoName(): string | undefined;
    set originalGitHubBranch(newGitHubBranch: string | undefined);
    get originalGitHubBranch(): string | undefined;
    set gitHubOwner(newGitHubOwner: string | undefined);
    get gitHubOwner(): string | undefined;
    set gitHubFolder(newGitHubFolder: string | undefined);
    get gitHubFolder(): string | undefined;
    set gitHubRepoName(newGitHubRepoName: string | undefined);
    get gitHubRepoName(): string | undefined;
    set gitHubBranch(newGitHubBranch: string | undefined);
    get gitHubBranch(): string | undefined;
    get description(): string;
    set description(newDescription: string);
    applyDescription(newTitle: string): Promise<void>;
    get autoDeploymentMode(): ProjectAutoDeploymentMode;
    set autoDeploymentMode(newMode: ProjectAutoDeploymentMode);
    get versionAsArray(): number[];
    get versionAsString(): string;
    get versionMajor(): number | undefined;
    set versionMajor(newVersion: number | undefined);
    get versionMinor(): number | undefined;
    set versionMinor(newVersion: number | undefined);
    get versionPatch(): number | undefined;
    set versionPatch(newVersion: number | undefined);
    get defaultResourcePackUniqueId(): string;
    set defaultResourcePackUniqueId(newId: string);
    setDefaultResourcePackUniqueIdAndUpdateDependencies(newId: string): Promise<void>;
    get defaultResourcePackVersion(): number[];
    set defaultResourcePackVersion(newVersion: number[]);
    get defaultBehaviorPackUniqueId(): string;
    set defaultBehaviorPackUniqueId(newId: string);
    setDefaultBehaviorPackUniqueIdAndUpdateDependencies(newId: string): Promise<void>;
    get defaultBehaviorPackVersion(): number[];
    set defaultBehaviorPackVersion(newVersion: number[]);
    get defaultDataUniqueId(): string;
    set defaultDataUniqueId(newId: string);
    /**
     * Returns true if an info set generation is currently in progress.
     * Can be used by UI to show waiting state.
     */
    get isInfoSetGenerationInProgress(): boolean;
    ensureIndevInfoSetGenerated(): Promise<ProjectInfoSet>;
    /**
     * Internal method that performs the actual info set generation.
     * Separated from ensureInfoSetGenerated to allow tracking via promise.
     */
    private _performInfoSetGeneration;
    ensureScriptInDestination(): Promise<void>;
    hasScript(): Promise<boolean>;
    get projectCabinetFile(): IFile;
    get defaultScriptModuleUniqueId(): string;
    set defaultScriptModuleUniqueId(newId: string);
    get focus(): ProjectFocus;
    set focus(newFocus: ProjectFocus);
    constructor(creatorTools: CreatorTools, name: string, preferencesFile: IFile | null, sanitizeName?: boolean);
    notifyProjectItemChanged(item: ProjectItem): void;
    notifyProjectItemContentChanged(item: ProjectItem, fileUpdate: IFileUpdateEvent): void;
    clearFolders(): void;
    ensureVariant(label: string): ProjectVariant;
    ensureWorldContainer(): Promise<IFolder>;
    ensureCatalogIndex(): Promise<void>;
    getDefaultScriptsFile(): Promise<IFile>;
    inferProjectItemsFromFilesRootFolder(force?: boolean, processingCallback?: (area: string) => void): Promise<void>;
    ensureAutogeneratedBehaviorPackManifest(): Promise<void>;
    dispose(): void;
    resetProjectItems(): void;
    ensureStoragePathIsCollapsed(storagePath: string): void;
    get isVanillaSourceProject(): boolean;
    get isVanillaEditSession(): boolean;
    computeIsVanillaEditSession(): void;
    ensureStoragePathIsNotCollapsed(storagePath: string): void;
    inferProjectItemsFromFiles(force?: boolean, processingCallback?: (area: string) => void, deepScanJson?: boolean): Promise<void>;
    ensureProjectFolderFromCabinet(): Promise<void>;
    inferProjectItemsFromZipFile(projectPath: string, file: IFile, force?: boolean): Promise<string | undefined>;
    processRelations(force?: boolean): Promise<void>;
    completeProcessItemRelationsBatchProcessing(): Promise<void>;
    ensureJsIndexFile(): Promise<void>;
    applyUpdate(updaterId: string, updaterIndex: number): Promise<ProjectUpdateResult[]>;
    getScriptState(): Promise<IProjectScriptState>;
    getFirstItemByType(itemType: ProjectItemType): ProjectItem;
    hasAddonJson(): boolean;
    private loadFolderStructure;
    setToVersion(versionId: string): void;
    getChangeList(): IVersionContent[];
    private processProjectFolder;
    getItemByFile(file: IFile): ProjectItem;
    getItemByProjectPath(projectPath: string): ProjectItem | undefined;
    getItemByExtendedOrProjectPath(storagePath: string): ProjectItem | undefined;
    ensureItemFromFile(file: IFile, itemType: ProjectItemType, folderContext: FolderContext, creationType?: ProjectItemCreationType): ProjectItem;
    ensureItemByProjectPath(projectPath: string, storageType: ProjectItemStorageType, name: string, itemType: ProjectItemType, context: FolderContext, source?: string, creationType?: ProjectItemCreationType, file?: IFile, tag?: string, isInWorld?: boolean): ProjectItem;
    getItemByTag(tag: string): ProjectItem | null;
    hasItemOfType(type: ProjectItemType): boolean;
    ensureItemByTag(tag: string, name: string, itemType: ProjectItemType, storagePath?: string, storageType?: ProjectItemStorageType, creationType?: ProjectItemCreationType, file?: IFile, isInWorld?: boolean): ProjectItem;
    ensureWorkingFolderForFile(file: IFile): Promise<IFolder>;
    createItem(initialSettings: IProjectItemData): ProjectItem;
    loadPreferencesAndFolder(): Promise<void>;
    /**
     * Loads just the project preferences file (lightweight - doesn't load project folder).
     * Useful for displaying project metadata in lists without full project initialization.
     */
    ensurePreferencesLoaded(): Promise<void>;
    ensureInflated(): Promise<void>;
    deletePreferencesFile(): Promise<void>;
    deleteThisProject(): Promise<void>;
    saveToFile(): Promise<void>;
    /**
     * Updates the project's preview image from available pack icons or textures.
     * Priority: (1) behavior pack icon, (2) resource pack icon, (3) skin pack icon, (4) any texture
     */
    updatePreviewImageIfNeeded(): Promise<boolean>;
    private _handleDeployUpdated;
    save(force?: boolean): Promise<void>;
    autoCompleteProject(): Promise<void>;
    updateProjectItemsFromContent(): void;
    setProjectFolder(newFolder: IFolder): void;
    attemptToLoadPreferences(): Promise<void>;
    _unapplyFromProjectFolder(): void;
    _applyToProjectFolder(): void;
    ensureProjectFolder(force?: boolean): Promise<IFolder>;
    _inferProjectItemFromFile(file: IFile, folder: IFolder, fileStoragePath: string): Promise<void>;
    _handleProjectFolderMoved(folder: IFolder, folderMove: IFolderMove): void;
    _handleProjectFileContentsUpdated(storage: IStorage, fileUpdate: IFileUpdateEvent): Promise<void>;
    /**
     * Handles a file being added externally (e.g., by MCP saving a new model).
     * Uses debouncing to batch multiple rapid additions into a single re-inference pass.
     */
    _handleProjectFileAdded(storage: IStorage, file: IFile): Promise<void>;
    /**
     * Handles a file being removed externally.
     * Uses debouncing to batch multiple rapid removals into a single cleanup pass.
     */
    _handleProjectFileRemoved(storage: IStorage, filePath: string): Promise<void>;
    /**
     * Schedules the debounced flush of external file changes.
     */
    private _scheduleExternalChangeFlush;
    /**
     * Processes all pending external file additions and removals.
     * Called after the debounce timer expires.
     */
    _flushExternalChanges(): Promise<void>;
    ensureDistFolder(): Promise<IFolder>;
    ensureDistBuildScriptsFolder(): Promise<IFolder>;
    getLibFolder(): IFolder | null;
    getDistBuildFolder(): IFolder | null;
    ensureLibFolder(): Promise<IFolder>;
    getLibScriptsFolder(): IFolder | null;
    getDistBuildScriptsFolder(): IFolder | null;
    ensureLibScriptsFolder(): Promise<IFolder>;
    ensureDocsFolder(): Promise<IFolder>;
    ensureDefaultScriptsFolder(): Promise<IFolder>;
    getDefaultWorldFolder(): Promise<IFolder | null>;
    ensurePacks(): Promise<void>;
    ensurePacksAsync(): Promise<void>;
    getDefaultBehaviorPackFolder(force?: boolean, preventEnsureFileStorage?: boolean): Promise<IFolder | null>;
    getDefaultBehaviorPack(): Promise<Pack | undefined>;
    ensureDefaultBehaviorPackFolder(force?: boolean): Promise<IFolder>;
    ensureDefaultDesignPackFolder(force?: boolean): Promise<IFolder>;
    ensurePackByFolder(folder: IFolder, packType: PackType, isInWorld: boolean): Promise<Pack>;
    getDefaultDesignPackFolder(force?: boolean): Promise<IFolder | null>;
    getDefaultSkinPackFolder(force?: boolean): Promise<IFolder | null>;
    getDefaultResourcePackFolder(force?: boolean): Promise<IFolder | null>;
    ensureDefaultResourcePackFolder(force?: boolean): Promise<IFolder>;
    ensureLoadedProjectFolder(force?: boolean): Promise<IFolder>;
}
