import { Client } from '../mnubo';
export interface SimpleType {
    highLevelType: string;
}
export interface ComplexType {
    highLevelType: string;
    containerType: string;
}
export interface Timeseries {
    key: string;
    displayName: string;
    description: string;
    type: SimpleType;
}
export interface SingleTimeseries {
    key: string;
    displayName: string;
    description: string;
    type: SimpleType;
    eventTypeKeys: Array<string>;
}
export interface SingleObjectAttribute {
    key: string;
    displayName: string;
    description: string;
    type: ComplexType;
    objectTypeKeys: Array<string>;
}
export interface ObjectAttribute {
    key: string;
    displayName: string;
    description: string;
    type: ComplexType;
}
export interface OwnerAttribute {
    key: string;
    displayName: string;
    description: string;
    type: ComplexType;
}
export interface Sessionizer {
    key: string;
    displayName: string;
    description: string;
    startEventTypeKey: string;
    endEventTypeKey: string;
}
export interface EventType {
    key: string;
    displayName: string;
    description: string;
    origin: string;
    timeseries: Array<Timeseries>;
}
export interface SingleEventType {
    key: string;
    displayName: string;
    description: string;
    origin: string;
    timeseriesKeys: Array<string>;
}
export interface ObjectType {
    key: string;
    displayName: string;
    description: string;
    objectAttributes: Array<ObjectAttribute>;
}
export interface SingleObjectType {
    key: string;
    displayName: string;
    description: string;
    objectAttributesKeys: Array<string>;
}
export interface Orphans {
    timeseries?: Array<Timeseries>;
    objectAttributes?: Array<ObjectAttribute>;
}
export interface DataModel {
    objectTypes: Array<ObjectType>;
    eventTypes: Array<EventType>;
    ownerAttributes: Array<OwnerAttribute>;
    sessionizers: Array<Sessionizer>;
    orphans: Orphans;
}
export interface EntityOps<A> {
    create(values: Array<A> | A): Promise<void>;
    update(key: string, update: {
        displayName: string;
        description: string;
    }): Promise<void>;
    generateDeployCode(key: string): Promise<string>;
    applyDeployCode(key: string, code: string): Promise<void>;
    deploy(key: string): Promise<void>;
}
export interface TypeOps<A> {
    create(values: Array<A> | A): Promise<void>;
    update(key: string, update: A): Promise<void>;
    delete(key: string): Promise<void>;
    addRelation(key: string, entityKey: string): Promise<void>;
    removeRelation(key: string, entityKey: string): Promise<void>;
}
export interface ResetOps {
    generateResetCode(): Promise<string>;
    applyResetCode(code: string): Promise<void>;
    reset(): Promise<void>;
}
export interface SandboxOnlyOps {
    timeseriesOps: EntityOps<SingleTimeseries>;
    ownerAttributesOps: EntityOps<OwnerAttribute>;
    objectAttributesOps: EntityOps<SingleObjectAttribute>;
    objectTypesOps: TypeOps<SingleObjectType>;
    eventTypesOps: TypeOps<SingleEventType>;
    resetOps: ResetOps;
}
export declare class Model {
    private client;
    sandboxOps: SandboxOnlyOps;
    constructor(client: Client);
    export(): Promise<DataModel>;
    getTimeseries(): Promise<Array<Timeseries>>;
    getOwnerAttributes(): Promise<Array<OwnerAttribute>>;
    getObjectAttributes(): Promise<Array<ObjectAttribute>>;
    getObjectTypes(): Promise<Array<ObjectType>>;
    getEventTypes(): Promise<Array<EventType>>;
}
