import type { IArcGISContext } from "../types/IArcGISContext";
import { IEditorConfig } from "../core/schemas/types";
import { HubItemEntity } from "../core/HubItemEntity";
import { IHubTemplate, IHubTemplateEditor } from "../core/types/IHubTemplate";
import { TemplateEditorType } from "./_internal/templateEditorTypes";
import { IEntityEditorContext } from "../core/types/HubEntityEditor";
/**
 * Hub Template Class - this class encapsulates the standard
 * operations for a "Solution" item despite the Hub team not
 * "owning" this item type. Our primary goal is to allow
 * editing of the item's meta information, manage sharing, etc.
 */
export declare class HubTemplate extends HubItemEntity<IHubTemplate> {
    /**
     * Private constructor to allow for future
     * template-specific logic
     * @param template
     * @param context
     */
    private constructor();
    /**
     * Create an HubTemplate instance from an IHubTemplate object
     * @param json - JSON object to create a HubTemplate from
     * @param context - ArcGIS context
     * @returns
     */
    static fromJson(json: Partial<IHubTemplate>, context: IArcGISContext): HubTemplate;
    /**
     * Create a new HubTemplate, returning a HubTemplate instance.
     * This does not automatically persist the Template into
     * the backing store unless save is set to true
     *
     * NOTE: we have no immediate plans to allow template creation
     * from the context of the Hub application, but scaffolding this
     * method for potential future implementation. The underlying
     * createTemplate function will throw an error if attempted.
     * @param partialTemplate
     * @param context
     * @param save
     */
    static create(partialTemplate: Partial<IHubTemplate>, context: IArcGISContext, save?: boolean): Promise<HubTemplate>;
    /**
     * Fetch a HubTemplate from the backing store and return
     * a HubTemplate instance
     * @param identifier
     * @param context
     */
    static fetch(identifier: string, context: IArcGISContext): Promise<HubTemplate>;
    /**
     * Given a partial Template, apply defaults to
     * it to ensure that a baseline of properties are set
     * @param partialTemplate
     * @param context
     */
    private static applyDefaults;
    getEditorConfig(i18nScope: string, type: TemplateEditorType): Promise<IEditorConfig>;
    /**
     * Transform template entity into an editor object
     * @param editorContext
     */
    toEditor(_editorContext?: IEntityEditorContext, include?: string[]): Promise<IHubTemplateEditor>;
    /**
     * Transform editor values into a template entity
     * @param editor
     */
    fromEditor(editor: IHubTemplateEditor): Promise<IHubTemplate>;
    /**
     * Update the instance's internal entity state
     * @param changes
     */
    update(changes: Partial<IHubTemplate>): void;
    /** Save the HubTemplate to the backing store */
    save(): Promise<void>;
    /**
     * Delete the Hub Template's backing item and set a flag
     * indicating it's been destroyed
     */
    delete(): Promise<void>;
}
