import { ModelFactory, BaseKosModelRegistrationBean } from '../../types';
import { IKosDataModel, IKosDataModelBuilder, IKosModel } from '../kosModel';
import { IKosRegistry, IKosSubscriptionSpecification, KosCompanionModelType } from './registration';
export interface IKosCreateInstanceResponse<T extends IKosDataModel> {
    model: IKosModel<T>;
    data: T;
}
export interface IKosModelManager {
    addModel(model: IKosModel): IKosModel;
    destroyModel(model: IKosModel): Promise<void>;
    initiateDestroyModel(model: IKosDataModel): Promise<void>;
    registerCompanionModel(typeId: string, companionRegistration: KosCompanionModelType<any>): void;
    registerModel<T extends BaseKosModelRegistrationBean<any, any>>(modelRegistration: T): void;
    addDependency(modelId: string, dependencyId: string): void;
    removeDependency(modelId: string, dependencyId: string): void;
    reloadModel(model: IKosDataModel): Promise<void>;
    removeModel(model: IKosModel): void;
    hasModel(id: string): boolean;
    getModelById<DataDef extends IKosDataModel>(id: string): IKosModel<DataDef> | undefined;
    getModelFactory<DataDef extends IKosDataModel>(modelType: string): ModelFactory<DataDef> | undefined;
    getModelsByType<DataDef extends IKosDataModel>(id: string, modelFilter?: (model: DataDef) => boolean): DataDef[];
    preloadedModels: IKosModel[];
    models: IKosModel[];
    registry: IKosRegistry;
    getModelSubscriptions(typeId: string): Record<string, IKosSubscriptionSpecification>;
    createModelInstance<DataType extends IKosDataModel, Options extends Record<string, any> = {}>(modelTypeId: string, id?: string, options?: Options): IKosCreateInstanceResponse<DataType>;
    getDataModelBuilder<D = unknown, M extends IKosDataModel = IKosDataModel>(typeId: string): IKosDataModelBuilder<D, M>;
}
export interface IKosEntityManagerParams {
    serviceName: string;
}
//# sourceMappingURL=kos-model-manager-types.d.ts.map