import { PropertyValues, TemplateResult } from "lit";
import "@openremote/or-components/or-panel";
import { AttributeDescriptor, ConnectionStatus, GatewayAttributeFilter, GatewayConnection, GatewayConnectionStatusEvent, GatewayAssetSyncRule } from "@openremote/model";
import { OrInputChangedEvent } from "@openremote/or-mwc-components/or-mwc-input";
import { AppStateKeyed, Page, PageProvider } from "@openremote/or-app";
import { Store } from "@reduxjs/toolkit";
import "@openremote/or-components/or-ace-editor";
export declare function pageGatewayProvider(store: Store<AppStateKeyed>): PageProvider<AppStateKeyed>;
export declare class PageGateway extends Page<AppStateKeyed> {
    static get styles(): import("lit").CSSResult;
    protected realm?: string;
    protected _loading: boolean;
    protected _connection?: GatewayConnection;
    protected _connectionStatus?: ConnectionStatus;
    protected _dirty: boolean;
    protected _invalid: boolean;
    protected _readonly: boolean;
    protected _eventSubscriptionId?: string;
    protected _intervalMin?: number;
    get name(): string;
    connectedCallback(): void;
    disconnectedCallback(): void;
    stateChanged(state: AppStateKeyed): void;
    protected _subscribeEvents(): Promise<void>;
    protected _unsubscribeEvents(): void;
    shouldUpdate(_changedProperties: PropertyValues): boolean;
    updated(_changedProperties: PropertyValues): void;
    protected render(): TemplateResult | void;
    protected _getTitleTemplate(connection?: GatewayConnection, _status?: ConnectionStatus, disabled?: boolean): Promise<TemplateResult>;
    protected _getContentTemplate(content: () => Promise<TemplateResult>): Promise<TemplateResult>;
    /**
     * Returns an HTML {@link TemplateResult} with controls to configure the {@link GatewayConnection}.
     * Settings like host, port, realm, clientId, clientSecret, and more.
     */
    protected _getSettingsColumns(connection: GatewayConnection, disabled?: boolean): Promise<TemplateResult>;
    /**
     * Returns an HTML {@link TemplateResult} with the controls to limit the rate of {@link AttributeEvent}s in the {@link GatewayConnection}.
     * Think of an attribute picker, and a number control to define the interval (in minutes).
     */
    protected _getDataSharingColumns(connection: GatewayConnection, isCustom?: boolean, disabled?: boolean): Promise<TemplateResult>;
    protected _getAssetSyncRulesColumns(connection: GatewayConnection, disabled?: boolean): Promise<TemplateResult>;
    /**
     * HTML callback for checking the "limit data sharing by attribute" checkbox.
     */
    protected _onLimitAttributesCheck(ev: OrInputChangedEvent): void;
    /**
     * HTML callback for clicking the "X attributes selected" button.
     * Here, it opens an attribute picker and handles its callback.
     */
    protected _onLimitAttributesButtonClick(_ev: OrInputChangedEvent): void;
    /**
     * HTML callback for when the "minutes interval between attribute values" updates.
     */
    protected _onAttributesIntervalUpdate(value?: number): void;
    protected _onAssetSyncRulesToggle(enabled: boolean): void;
    /**
     * HTML callback for when the GatewayAssetSyncRules updates.
     */
    protected _onAssetSyncRulesUpdated(syncRules?: {
        [index: string]: GatewayAssetSyncRule;
    }): void;
    protected _getDefaultGatewayAssetSyncRules(): {
        [index: string]: GatewayAssetSyncRule;
    };
    /**
     * Internal function that returns a map of {@link AttributeDescriptor[]}, based on the {@link GatewayAttributeFilter}.
     * Mainly meant for the attribute-picker, as it uses AttributeDescriptors instead.
     */
    protected _getAttrDescriptorMapFromFilters(attrFilters?: GatewayAttributeFilter[]): Map<string, AttributeDescriptor[]>;
    protected _loadData(): Promise<void>;
    protected _updateAttributeFilters(attributeFilters: GatewayAttributeFilter[]): void;
    protected _setConnectionProperty(propName: string, value: any): void;
    protected _save(): Promise<void>;
    protected _setConnection(connection: GatewayConnection): void;
    protected _onEvent(event: GatewayConnectionStatusEvent): void;
    /**
     * Internal function that verifies whether the Data Sharing configuration is customized through JSON.
     * (by checking the amount of object keys, and whether it is valid at all)
     */
    protected _isDataSharingCustom(connection?: GatewayConnection): boolean;
    protected _isValid(): boolean;
    /**
     * Function that opens the JSON editor for customizing the {@link GatewayAttributeFilter}s manually.
     * The changed are only applied once the save button is pressed.
     */
    protected _openConnectionJSONEditor(connection?: GatewayConnection): void;
}
