import { IKosDataModel, IKosDataModelBuilder, IKosDataModelCreator, IKosModel } from '../kosModel';
import { DataLoader, DataMapper, PropertyMapper } from '../extension';

export interface IKosSubscriptionSpecification {
    webSocket: boolean;
    handler: (payload: any, model: IKosModel) => void;
}
export interface TroubleHandlerContext {
    title: string;
    subtitle: string;
    steps?: Record<string, {
        title: string;
        subtitle: string;
    }>;
    canDismiss?: boolean;
    showTimeRemaining?: boolean;
}
export interface TroubleHandler extends TroubleHandlerContext {
    type: string;
    context?: Record<string, TroubleHandlerContext>;
}
export interface IKosModelRegistration {
    builder?: IKosDataModelBuilder<any, any>;
    create?: IKosDataModelCreator<any, any>;
    class?: new (...args: any[]) => IKosDataModel;
    singleton?: boolean;
    preload?: boolean;
    subscriptions?: Record<string, IKosSubscriptionSpecification>;
}
export interface ExtensionRegistration {
    dataMapper?: Record<string, DataMapper | DataMapper[]>;
    propertyMapper?: Record<string, PropertyMapper>;
    contextLoader?: Record<string, DataLoader>;
}
export type KosCompanionTypeFactory<T extends IKosDataModel = IKosDataModel> = (model: T, options: any) => string | undefined;
export type KosCompanionModelType<T extends IKosDataModel = IKosDataModel> = string | KosCompanionTypeFactory<T>;
export declare const isKosCompanionTypeFactory: (obj: any) => obj is KosCompanionTypeFactory<IKosDataModel>;
export interface IKosCompanionRegistration {
    type: KosCompanionModelType<any>;
}
export type Preloaded = string | {
    modelType: string;
    modelId: string;
    options?: any;
};
export interface IKosRegistry {
    alias?: string;
    models: Record<string, IKosModelRegistration>;
    companionModels?: Record<string, IKosCompanionRegistration[]>;
    troubleHandlers?: Record<string, TroubleHandler>;
    preloadModels: Preloaded[];
    extensions?: ExtensionRegistration;
}
//# sourceMappingURL=registration.d.ts.map