/**
 * ARCHITECTURE DOCUMENTATION: ModelDesignDefinition
 * ==================================================
 *
 * This class persists model design data as an accessory file alongside the
 * generated geometry file. It enables:
 * 1. Design iteration - update existing models without creating duplicates
 * 2. Context restoration - AI can reload the design spec to understand/modify it
 * 3. Preview regeneration - re-render from saved design on demand
 *
 * ## Accessory Folder Pattern
 *
 * For a geometry file at:
 *   resource_packs/my_pack/models/entity/disco_pig.geo.json
 *
 * The accessory folder is at:
 *   design_pack/project_item_data/resource_packs/my_pack/models/entity/disco_pig_geo_json/
 *
 * And contains:
 *   - model_design.json: The IMcpModelDesign specification
 *   - preview.png: Last rendered preview image
 *   - generation_meta.json: Timestamp, model used, etc.
 *
 * ## Related Files
 * - src/design/ImageEditsDefinition.ts - Similar pattern for image edits
 * - src/app/ProjectItem.ts - ensureAccessoryFolder() implementation
 * - src/local/MinecraftMcpServer.ts - createModel tool that uses this
 */
import IFile from "../storage/IFile";
import { IEventHandler } from "ste-events";
import Project from "../app/Project";
import ProjectItem from "../app/ProjectItem";
import { IMcpModelDesign } from "../minecraft/IMcpModelDesign";
/**
 * Metadata about when/how the model was generated.
 */
export interface IModelGenerationMeta {
    /** When the model was last generated */
    generatedAt: string;
    /** The AI model/tool that generated it (if known) */
    generatorModel?: string;
    /** The prompt or request that led to generation (if known) */
    prompt?: string;
    /** Version of the design schema */
    schemaVersion: "1.0.0";
}
/**
 * The complete persisted model design data.
 */
export interface IModelDesignData {
    /** The model design specification */
    design: IMcpModelDesign;
    /** Generation metadata */
    meta: IModelGenerationMeta;
    /** The usage context (entity, block, item) */
    usage?: "entity" | "block" | "item";
    /** What this model was wired to (if any) */
    wiredTo?: string;
}
/**
 * Manages persistence of model design data in accessory folders.
 * Follows the same pattern as ImageEditsDefinition.
 */
export default class ModelDesignDefinition {
    private _file?;
    private _previewFile?;
    private _isLoaded;
    data?: IModelDesignData;
    project?: Project;
    private _onLoaded;
    get isLoaded(): boolean;
    get file(): IFile | undefined;
    set file(newFile: IFile | undefined);
    get onLoaded(): import("ste-events").IEvent<ModelDesignDefinition, ModelDesignDefinition>;
    get design(): IMcpModelDesign | undefined;
    get usage(): "entity" | "block" | "item" | undefined;
    get wiredTo(): string | undefined;
    /**
     * Updates the design data and persists it.
     */
    updateDesign(design: IMcpModelDesign, options?: {
        usage?: "entity" | "block" | "item";
        wiredTo?: string;
        generatorModel?: string;
        prompt?: string;
    }): Promise<void>;
    /**
     * Saves a preview image to the accessory folder.
     */
    savePreview(imageData: Uint8Array): Promise<void>;
    /**
     * Gets the preview image data if it exists.
     */
    getPreview(): Promise<Uint8Array | undefined>;
    /**
     * Creates or gets a ModelDesignDefinition for a ProjectItem's accessory folder.
     * Use this when you have the ProjectItem for the geometry file.
     */
    static ensureAsAccessoryOnProjectItem(projectItem: ProjectItem): Promise<ModelDesignDefinition | undefined>;
    /**
     * Creates or gets a ModelDesignDefinition attached to a file.
     */
    static ensureOnFile(file: IFile, project: Project, loadHandler?: IEventHandler<ModelDesignDefinition, ModelDesignDefinition>): Promise<ModelDesignDefinition | undefined>;
    /**
     * Persists the design data to file (only if semantically different).
     */
    persist(): Promise<boolean>;
    /**
     * Saves the design data to file.
     */
    save(): Promise<void>;
    /**
     * Loads the design data from file.
     */
    load(): Promise<void>;
}
