import { ConfigPropertyTypes } from '../types';
import { ConfigBeanUpdateResponse } from '../../services/config-bean';
import { ConfigBeanKeys, IConfigBeanModelOptions } from './config-bean-types';
import { IKosDataModel, KosData, PublicModelInterface, KosModelRegistrationFactory } from '../../../core';

export type IConfigBeanModel<T extends {} = any> = PublicModelInterface<ConfigBeanModelImpl<T>>;
export declare const CONFIG_BEAN_MODEL_TYPE = "config-bean-model";
/**
 * @category Model
 * @name ConfigBeanModel
 * @version 1.0.0
 * @author Mark Pomerant <mpomerant@coca-cola.com>
 *
 * Represents a config bean.
 */
declare class ConfigBeanModelImpl<T extends {} = any> implements IKosDataModel {
    private _modifyConfigBean;
    private _getConfigBean;
    private _schema?;
    id: string;
    path: string;
    props: KosData<Record<ConfigBeanKeys<T>, ConfigPropertyTypes>>;
    prevProps: KosData<Record<ConfigBeanKeys<T>, ConfigPropertyTypes>>;
    serviceBasePath?: string;
    /**
     * @category Constructor
     *
     * @param modelId - the unique modelId for this Config Bean
     * @param options - any options that should be merged into the Config Bean
     * @params options.id - the unique id of the Config Bean
     * @params options.name - the name of the Config Bean
     *
     */
    constructor(modelId: string, options: IConfigBeanModelOptions);
    get values(): Record<keyof T, unknown>[keyof T][];
    ready(): Promise<void>;
    /**
     * @category Lifecycle
     *
     * @remarks
     * No action is taken as part of the load lifecycle method.
     *
     * In future additional information about the worksapce could be loaded
     */
    load(): Promise<void>;
    get schemaKeys(): string[];
    getSchemaForProperty(key: string): import('../../services/config-bean').SchemaNodeDef | undefined;
    updateProperty(key: ConfigBeanKeys<T>, value: ConfigPropertyTypes): Promise<void>;
    /**
     * @category Action
     *
     * @remark
     * Updates the current Config Bean representation in the backend.
     *
     * If a service was passed in as part of the options in the constructor
     * then it will be used.  Otherwise the default services will be invoked.
     *
     * @see modifyConfigBeanService
     */
    updateConfigBean(): Promise<void>;
    /**
     * @category Subscription
     * Updates the Config Bean model when a `/kos/config//update` event
     * is recieved from the server.
     *
     *
     * @param data - the raw callback
     * @param data.body - the Config Bean that was updated.
     * @see ConfigBeanResponse
     */
    handleConfigBeanUpdated(configBean: ConfigBeanUpdateResponse): void;
}
export declare const ConfigBean: KosModelRegistrationFactory<IConfigBeanModel<any>, IConfigBeanModelOptions>;
export {};
//# sourceMappingURL=config-bean-model.d.ts.map