import type { IGroup } from "@esri/arcgis-rest-portal";
import { HubItemEntity } from "../core/HubItemEntity";
import { IHubEventEditor, IHubEvent } from "../core/types/IHubEvent";
import { SettableAccessLevel } from "../core/types/types";
import type { IArcGISContext } from "../types/IArcGISContext";
import { IEditorConfig } from "../core/schemas/types";
import { EventEditorType } from "./_internal/eventEditorTypes";
import { IWithEditorBehavior } from "../core/behaviors/IWithEditorBehavior";
import { IEntityEditorContext } from "../core/types/HubEntityEditor";
/**
 * Defines the properties of a Hub Event object
 * @internal
 */
export declare class HubEvent extends HubItemEntity<IHubEvent> implements IWithEditorBehavior {
    /**
     * Create an instance from a HubEvent object
     * @param json - JSON object to create a HubEvent from
     * @param context - ArcGIS context
     * @returns HubEvent
     */
    static fromJson(json: Partial<IHubEvent>, context: IArcGISContext): HubEvent;
    /**
     * Fetch an Event from the API and return a HubEvent instance.
     * @param identifier slug or item id
     * @param context ArcGIS context
     * @returns Promise<HubEvent>
     */
    static fetch(identifier: string, context: IArcGISContext): Promise<HubEvent>;
    private static applyDefaults;
    /**
     * Apply a new state to the instance
     * @param changes A partial IHubEvent
     */
    update(changes: Partial<IHubEvent>): void;
    /**
     * Creates or saves the Event.
     */
    save(): Promise<void>;
    /**
     * Deletes the Event
     */
    delete(): Promise<void>;
    /**
     * Share the Entity with the specified group id
     * @param groupId The ID of the group to share the Event to
     */
    shareWithGroup(groupId: string): Promise<void>;
    /**
     * Share the Entity with the specified group ids
     * @param groupIds The IDs of the groups to share the Event to
     */
    shareWithGroups(groupIds: string[]): Promise<void>;
    /**
     * Unshare the Event with the specified group id
     * @param groupId The ID of the group to unshar ethe Event with
     */
    unshareWithGroup(groupId: string): Promise<void>;
    /**
     * Unshare the Event with the specified group ids
     * @param groupIds The IDs of the groups to unshare the Event with
     */
    unshareWithGroups(groupIds: string[]): Promise<void>;
    /**
     * Sets the access level of the event
     * @param access The access level to set the Event to
     */
    setAccess(access: SettableAccessLevel): Promise<void>;
    /**
     * Return a list of groups the Entity is shared to.
     */
    sharedWith(): Promise<IGroup[]>;
    getEditorConfig(i18nScope: string, type: EventEditorType): Promise<IEditorConfig>;
    /**
     * Return the HubEvent object as an editor object
     * @param editorContext
     * @param include
     * @returns Promise<IHubEventEditor>
     */
    toEditor(_editorContext?: IEntityEditorContext, _include?: string[]): Promise<IHubEventEditor>;
    /**
     * Load the HubEvent object from the editor object
     * @param editor
     * @param editorContext
     * @returns Promise<IHubEvent>
     */
    fromEditor(editor: IHubEventEditor): Promise<IHubEvent>;
}
