import type { IArcGISContext } from "../types/IArcGISContext";
import { HubItemEntity } from "../core/HubItemEntity";
import { IEditorConfig } from "../core/schemas/types";
import { IWithEditorBehavior } from "../core/behaviors/IWithEditorBehavior";
import { DiscussionEditorType } from "./_internal/discussionEditorTypes";
import { IWithSharingBehavior } from "../core/behaviors/IWithSharingBehavior";
import { IWithStoreBehavior } from "../core/behaviors/IWithStoreBehavior";
import { IEntityEditorContext } from "../core/types/HubEntityEditor";
import { IHubDiscussion, IHubDiscussionEditor } from "../core/types/IHubDiscussion";
/**
 * Hub Discussion Class
 */
export declare class HubDiscussion extends HubItemEntity<IHubDiscussion> implements IWithStoreBehavior<IHubDiscussion>, IWithSharingBehavior, IWithEditorBehavior {
    /**
     * Create an instance from an IHubDiscussion object
     * @param json JSON object to create a HubDiscussion from
     * @param context ArcGIS context
     * @returns a HubDiscussion
     */
    static fromJson(json: Partial<IHubDiscussion>, context: IArcGISContext): HubDiscussion;
    /**
     * Create a new HubDiscussion, returning a HubDiscussion instance.
     * Note: This does not persist the Discussion into the backing store
     * @param partialDiscussion a partial IHubDiscussion
     * @param context ArcGIS context
     * @returns promise that resolves a HubDiscussion
     */
    static create(partialDiscussion: Partial<IHubDiscussion>, context: IArcGISContext, save?: boolean): Promise<HubDiscussion>;
    /**
     * Fetch a Discussion from the backing store and return a HubDiscussion instance.
     * @param identifier slug or item id
     * @param context ArcGIS context
     * @returns promise that resolves a HubDiscussion
     */
    static fetch(identifier: string, context: IArcGISContext): Promise<HubDiscussion>;
    private static applyDefaults;
    /**
     * Apply a new state to the instance
     * @param changes A partial IHubDiscussion
     */
    update(changes: Partial<IHubDiscussion>): void;
    save(): Promise<void>;
    /**
     * Delete the HubDiscussion from the store
     * set a flag to indicate that it is destroyed
     * @returns a promise
     */
    delete(): Promise<void>;
    getEditorConfig(i18nScope: string, type: DiscussionEditorType): Promise<IEditorConfig>;
    /**
     * Return the project as an editor object
     * @param editorContext
     * @returns
     */
    toEditor(_editorContext?: IEntityEditorContext, include?: string[]): Promise<IHubDiscussionEditor>;
    /**
     * Load the project from the editor object
     * @param editor
     * @returns
     */
    fromEditor(editor: IHubDiscussionEditor): Promise<IHubDiscussion>;
}
