import { IKosDataModel, IKosModel } from '../core/kosModel';
/**
 * Asynchronously destroys a KOS data model.
 *
 * @async
 * @param model - The KOS data model to destroy.
 * @throws An error if the model cannot be destroyed.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const destroyKosModel: (model: IKosDataModel) => Promise<void>;
/**
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const unloadKosModel: (dataModel: IKosDataModel) => Promise<void>;
/**
 * Asynchronously resets a KOS data model.
 *
 * @async
 * @param model - The KOS data model to reset.
 * @throws An error if the model cannot be reset.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const resetKosModel: (model: IKosDataModel) => Promise<void>;
/**
 * Asynchronously retrieves the type of a KOS data model.
 *
 * @async
 * @param modelId - The ID of the KOS data model.
 * @returns The type of the KOS data model.
 * @throws An error if the model ID is not provided or the model cannot be found.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const getKosModelType: (modelId: string) => Promise<string | undefined>;
/**
 * Asynchronously retrieves a KOS data model and its type.
 *
 * @async
 * @param modelId - The ID of the KOS data model.
 * @returns An object containing the KOS data model and its type.
 * @throws An error if the model ID is not provided or the model cannot be found.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const getKosModel: <T extends IKosDataModel = IKosDataModel>(modelId: string) => Promise<{
    model: T;
    type: string | undefined;
}>;
/**
 * Synchronously retrieves a KOS data model and its type.
 *
 * @param modelId - The ID of the KOS data model.
 * @returns An object containing the KOS data model and its type.
 * @throws An error if the model ID is not provided or the model cannot be found.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const getKosModelSync: <T extends IKosDataModel = IKosDataModel>(modelId: string) => {
    model: T;
    type: string | undefined;
};
/**
 * Finds and filters KOS data models of a specific type based on a predicate.
 *
 * @param modelType - The type of the KOS data models to search for.
 * @param predicate - An object representing filter conditions.
 * @returns An array of filtered KOS data models.
 * @throws An error if the model type is not provided.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const findModels: <T extends IKosDataModel>(modelType: string, predicate: {
    [k: string]: any;
}) => T[];
/**
 * Finds and retrieves the first KOS data model of a specific type based on a predicate.
 *
 * @param modelType - The type of the KOS data models to search for.
 * @param predicate - An object representing filter conditions.
 * @returns The first matching KOS data model, or undefined if none is found.
 * @throws An error if the model type is not provided.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const findModel: <T extends IKosDataModel>(modelType: string, predicate: {
    [k: string]: any;
}) => T;
/**
 * Retrieves a companion KOS data model of a specific type associated with a given model.
 *
 * @param model - The KOS data model for which to retrieve a companion model.
 * @param type - The type of the companion model.
 * @returns The companion KOS data model of the specified type.
 * @throws An error if the model ID is not provided, the model cannot be found, or the companion model does not exist.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const getKosCompanionModel: <T extends IKosDataModel>(model: IKosDataModel, type: string) => T;
/**
 * Retrieves all companion models for a given model.
 *
 * @param model - The KOS data model for which to retrieve a companion model.
 * @returns The list of companion KOS data models
 * @throws An error if the model ID is not provided, the model cannot be found, or the companion model does not exist.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const getAllKosCompanionModels: (model: IKosDataModel) => IKosDataModel[];
/**
 * @kosService core.utils
 * @kosApiLevel 5
 */
export declare const getObservableCompanions: (modelId: string) => import('mobx').ObservableMap<string, IKosModel<IKosDataModel>>;
/**
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const resolveKosCompanion: <T extends IKosDataModel>(modelId: string, resolver: (model: T) => boolean) => IKosModel | undefined;
/**
 * Checks if an object is an instance of a specific KOS data model type.
 *
 * @param type - The type of the KOS data model to check against.
 * @returns A type guard function that checks if an object is an instance of the specified KOS data model type.
 *
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const isKosModel: <T extends IKosDataModel>(type: string) => (model: any) => model is T;
/**
 * @kosService core.utils
 * @kosApiLevel 2
 */
export declare const isKosModelReady: (model: IKosDataModel) => boolean;
//# sourceMappingURL=kos-model-utils.d.ts.map