import { IIdentified, Service, IResult, IResultList, IFetchClient, QueriesUtil } from '../core';
import { IManagedObject } from './IManagedObject';
import { InventoryBinaryService } from './InventoryBinaryService';
import { Realtime } from '../realtime';
/**
 * Possible types of a child.
 */
export declare enum ChildType {
    ASSETS = "childAssets",
    DEVICES = "childDevices",
    ADDITIONS = "childAdditions"
}
/**
 * IdReference is only a combined type of string | number | IIdentified
 */
export type IdReference = string | number | IIdentified;
/**
 * This class allows for managing managed objects and different child types, see [[ChildType]].
 */
export declare class InventoryService extends Service<IManagedObject> {
    binary: InventoryBinaryService;
    queriesUtil: QueriesUtil;
    protected baseUrl: string;
    protected listUrl: string;
    protected propertyName: string;
    protected channel: string;
    protected inventoriesQueryParamName: string;
    protected devicesQueryParamName: string;
    constructor(client: IFetchClient, realtime?: Realtime);
    /**
     * Gets the details of managed object
     *
     * @param {IdReference} managedObjectOrId ManagedObject or Id of the ManagedObject.
     * @param {object} filter Filter object.
     *
     * @returns Response wrapped in [[IResult]]
     *
     * **Example**
     * ```typescript
     *
     *    const managedObjId: number = 1;
     *    const filter = { withChildren: false };
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.detail(managedObjId, filter);
     *   })();
     * ```
     */
    detail(managedObjectOrId: IdReference, filter?: object): Promise<IResult<IManagedObject>>;
    /**
     * Creates a new managed object.
     *
     * @param {Partial<IManagedObject>} managedObject
     *
     * @returns Response wrapped in [[IResult]]
     *
     * **Example**
     * ```typescript
     *
     *  const partialManagedObj: Partial<IManagedObject> = {
     *    customFragment: 'yourData'
     *  };
     *
     *  (async () => {
     *    const {data, res} = await inventoryService.create(partialManagedObj);
     *  })();
     * ```
     */
    create(managedObject: Partial<IManagedObject>): Promise<IResult<IManagedObject>>;
    /**
     * Updates managed object data.
     *
     * @param {Partial<IManagedObject>} managedObject Managed object is partially updatable.
     *
     * @returns Response wrapped in [[IResult]]
     *
     * **Example**
     * ```typescript
     *
     *  const partialUpdateObject: Partial<IManagedObject> = {
     *    customFragment: 'Changed data',
     *    name: 'Name'
     *  };
     *
     *  (async () => {
     *    const {data, res} = await inventoryService.update(partialUpdateObject);
     *  })();
     * ```
     */
    update(managedObject: Partial<IManagedObject>): Promise<IResult<IManagedObject>>;
    /**
     * Gets the list of managed objects filtered by parameters.
     *
     * @returns Response wrapped in [[IResultList]]
     *
     * @param {object} filter Object containing filters for querying managed objects.
     *
     * **Example**
     * ```typescript
     *
     *  const filter: object = {
     *     pageSize: 100,
     *     withTotalPages: true
     *   };
     *
     *   (async () => {
     *     const {data, res, paging} = await inventoryService.list(filter);
     *   })();
     * ```
     */
    list(filter?: object): Promise<IResultList<IManagedObject>>;
    /**
     * Gets total count of managed objects filtered by parameters.
     *
     * @returns Response wrapped in [[IResultList]]
     *
     * @param {object} filter Object containing filters for querying managed objects.
     *
     * **Example**
     * ```typescript
     *
     *  const filter: object = {
     *     type: 'c8y_MQTTDevice'
     *   };
     *
     *   (async () => {
     *     const {data, res} = await inventoryService.count(filter);
     *   })();
     * ```
     */
    count(filter?: object): Promise<IResult<number>>;
    /**
     * Gets the list of all managed objects filtered and sorted by given query.
     *
     * @returns Response wrapped in [[IResultList]]
     *
     * @param {object} filter Object containing filters for querying managed objects.
     *
     * **Example**
     * ```typescript
     *
     *  const filter: object = {
     *     pageSize: 100,
     *     withTotalPages: true
     *   };
     *
     *  const query = {
     *      name: 'MY-NAM*'
     *  }
     *
     *   (async () => {
     *     const {data, res, paging} = await inventoryService.listQuery(query, filter);
     *   })();
     * ```
     */
    listQuery(query: any, filter?: object): Promise<IResultList<IManagedObject>>;
    /**
     * Gets the list of all devices filtered and sorted by given query.
     *
     * @returns Response wrapped in [[IResultList]]
     *
     * @param {object} filter Object containing filters for querying devices.
     *
     * **Example**
     * ```typescript
     *
     *  const filter: object = {
     *     pageSize: 100,
     *     withTotalPages: true
     *   };
     *
     *  const query = {
     *      name: 'MY-NAM*'
     *  }
     *
     *   (async () => {
     *     const {data, res, paging} = await inventoryService.listQueryDevices(query, filter);
     *   })();
     * ```
     */
    listQueryDevices(query: any, filter?: object): Promise<IResultList<IManagedObject>>;
    /**
     * Removes managed object with given id.
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {IdReference} managedObjectOrId ManagedObject or Id of the ManagedObject.
     * @param {object} params Additional query params.
     *
     * **Example**
     * ```typescript
     *
     *   const managedObjectId: number = 1;
     *   const params: any = {
     *     cascade: true
     *   }
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.delete(managedObjectId, params);
     *   })();
     * ```
     */
    delete(managedObjectOrId: IdReference, params?: any): Promise<IResult<null>>;
    /**
     * Gets a list of child additions from a given managed object (parent)
     *
     * @returns Response wrapped in [[IResultList]]
     *
     * @param {IdReference} parentReference
     * @param {object} filter
     *
     * **Example**
     * ```typescript
     *    const parentReferenceId: IdReference = 1;
     *
     *    const filter: object = {
     *      pageSize: 100,
     *      withTotalPages: true
     *    };
     *
     *    (async () => {
     *      const {data, res, paging} = await inventoryService.childAdditionsList(parentReferenceId, filter);
     *    })();
     * ```
     */
    childAdditionsList(parentReference: IdReference, filter?: object): Promise<IResultList<IManagedObject>>;
    /**
     * Creates a new managed object as child addition to another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {Partial<IManagedObject>} managedObject
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const mOAsChildAddition: Partial<IManagedObject> = {
     *      name: 'Child addition MO',
     *      type: 'new type',
     *      ...
     *    };
     *
     *    // This is the identifier of the managed object which should be the parent of
     *    // mOAsChildAddition, see above.
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childAdditionsCreate(mOAsChildAddition, parentReferenceId);
     *    })();
     * ```
     */
    childAdditionsCreate(managedObject: Partial<IManagedObject>, parentReference: IdReference): Promise<IResult<IIdentified>>;
    /**
     * Adds an existing managed object as child addition to another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {IdReference} childReference
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childRef: number = 2;
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childAdditionsCreate(childRef, parentReferenceId);
     *    })();
     * ```
     */
    childAdditionsAdd(childReference: IdReference, parentReference: IdReference): Promise<IResult<IIdentified>>;
    /**
     * Adds bulk of existing managed objects as child addition to another managed object (parent).
     *
     * @returns Response wrapped in array of [[IResult]]
     *
     * @param {IdReference[]} childReference List of existing managed objects IDs that should be added to another managed object (parent).
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childAdditionsRefIds: string[] = ['2', '3'];
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childAdditionsBulkAdd(childAdditionsRefIds, parentReferenceId);
     *    })();
     * ```
     */
    childAdditionsBulkAdd(childReference: IdReference[], parentReference: IdReference): Promise<IResultList<IIdentified>>;
    /**
     * Removes an existing managed object as child addition from another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {IdReference} childReference
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childRef: number = 2;
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childAdditionsRemove(childRef, parentReferenceId);
     *    })();
     * ```
     */
    childAdditionsRemove(childReference: IdReference, parentReference: IdReference): Promise<IResult<null>>;
    /**
     * Gets a list of child assets from a given managed object (parent)
     *
     * @returns Response wrapped in [[IResultList]]
     *
     * @param {IdReference} parentReference
     * @param {object} filter
     *
     * **Example**
     * ```typescript
     *
     *    const parentReferenceId: IdReference = 1;
     *
     *    const filter: object = {
     *      pageSize: 100,
     *      withTotalPages: true
     *    };
     *
     *    (async () => {
     *      const {data, res, paging} = await inventoryService.childAssetsList(parentReferenceId, filter);
     *    })();
     * ```
     */
    childAssetsList(parentReference: IdReference, filter?: object): Promise<IResultList<IManagedObject>>;
    /**
     * Creates a new managed object as child asset to another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {Partial<IManagedObject>} managedObject
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const mOAsChildAsset: Partial<IManagedObject> = {
     *      name: 'Child asset MO',
     *      type: 'new type',
     *      ...
     *    };
     *
     *    // This is the identifier of the managed object which should be the parent of
     *    // mOAsChildAsset, see above.
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childAdditionsCreate(mOAsChildAddition, parentReferenceId);
     *    })();
     * ```
     */
    childAssetsCreate(managedObject: Partial<IManagedObject>, parentReference: IdReference): Promise<IResult<IIdentified>>;
    /**
     * Adds an existing managed object as child asset to another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {IdReference} childReference
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childRef: number = 2;
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childAssetsAdd(childRef, parentReferenceId);
     *    })();
     * ```
     */
    childAssetsAdd(childReference: IdReference, parentReference: IdReference): Promise<IResult<IIdentified>>;
    /**
     * Adds bulk of existing managed objects as child assets to another managed object (parent).
     *
     * @returns Response wrapped in array of [[IResult]]
     *
     * @param {IdReference[]} childReference List of existing managed objects IDs that should be added to another managed object (parent).
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childAssetsRefIds: string[] = ['2', '3'];
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childAssetsBulkAdd(childAssetsRefIds, parentReferenceId);
     *    })();
     * ```
     */
    childAssetsBulkAdd(childReference: IdReference[], parentReference: IdReference): Promise<IResultList<IIdentified>>;
    /**
     * Removes an existing managed object as child asset from another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {IdReference} childReference
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childRef: number = 2;
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childAssetsRemove(childRef, parentReferenceId);
     *    })();
     * ```
     */
    childAssetsRemove(childReference: IdReference, parentReference: IdReference): Promise<IResult<null>>;
    /**
     * Gets a list of child devices from a given managed object (parent)
     *
     * @returns Response wrapped in [[IResultList]]
     *
     * @param {IdReference} parentReference
     * @param {object} filter
     *
     * **Example**
     * ```typescript
     *
     *    const parentReferenceId: IdReference = 1;
     *
     *    const filter: object = {
     *      pageSize: 100,
     *      withTotalPages: true
     *    };
     *
     *    (async () => {
     *      const {data, res, paging} = await inventoryService.childDevicesList(parentReferenceId, filter);
     *    })();
     * ```
     */
    childDevicesList(parentReference: IdReference, filter?: object): Promise<IResultList<IManagedObject>>;
    /**
     * Creates a new managed object as child device to another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {Partial<IManagedObject>} managedObject
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const mOAsChildDevice: Partial<IManagedObject> = {
     *      name: 'Child device MO',
     *      type: 'new type',
     *      ...
     *    };
     *
     *    // This is the identifier of the managed object which should be the parent of
     *    // mOAsChildDevice, see above.
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childDevicesCreate(mOAsChildDevice, parentReferenceId);
     *    })();
     * ```
     */
    childDevicesCreate(managedObject: Partial<IManagedObject>, parentReference: IdReference): Promise<IResult<IIdentified>>;
    /**
     * Adds an existing managed object as child device to another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {IdReference} childReference
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childRef: number = 2;
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childDevicesAdd(childRef, parentReferenceId);
     *    })();
     * ```
     */
    childDevicesAdd(childReference: IdReference, parentReference: IdReference): Promise<IResult<IIdentified>>;
    /**
     * Adds bulk of existing managed objects as child devices to another managed object (parent).
     *
     * @returns Response wrapped in array of [[IResult]]
     *
     * @param {IdReference[]} childReference List of existing managed objects IDs that should be added to another managed object (parent).
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childDevicesRefIds: string[] = ['2', '3'];
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childDevicesBulkAdd(childDevicesRefIds, parentReferenceId);
     *    })();
     * ```
     */
    childDevicesBulkAdd(childReference: IdReference[], parentReference: IdReference): Promise<IResultList<IIdentified>>;
    /**
     * Removes an existing managed object as child device from another managed object (parent)
     *
     * @returns Response wrapped in [[IResult]]
     *
     * @param {IdReference} childReference
     * @param {IdReference} parentReference
     *
     * **Example**
     * ```typescript
     *
     *    const childRef: number = 2;
     *    const parentReferenceId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await inventoryService.childDevicesRemove(childRef, parentReferenceId);
     *    })();
     * ```
     */
    childDevicesRemove(childReference: IdReference, parentReference: IdReference): Promise<IResult<null>>;
    /**
     * Gets an array of measurement fragments supported by the specified managedObject.
     * e.g. ["c8y_Temperature", "c8y_Humidity"]
     *
     * @returns array of supported measurement fragments
     *
     * @param {IdReference} managedObjectOrId
     */
    getSupportedMeasurements(managedObjectOrId: IdReference): Promise<string[]>;
    /**
     * Gets an array of measurement series supported by the specified managedObject.
     * e.g. ["c8y_Temperature.T", "c8y_Humidity.H"]
     *
     * @returns array of supported measurement series
     *
     * @param {IdReference} managedObjectOrId
     */
    getSupportedSeries(managedObjectOrId: IdReference): Promise<string[]>;
    /**
     * Gets an array of measurement series and fragments supported by the specified managedObject.
     *
     * @returns array of supported measurement series and fragments
     *
     * @param {IdReference} managedObjectOrId
     */
    getMeasurementsAndSeries(managedObjectOrId: IdReference): Promise<Array<{
        fragment: string;
        series: string;
    }>>;
    /**
     * Gets a list of KPIs (data point library entries) matching a given managed object
     *
     * @returns Response wrapped in [[IResultList]]
     *
     * @param {IdReference} parentReference
     * @param {object} filter
     */
    assetKPIsList(parentReference: IdReference, filter?: object): Promise<IResultList<IManagedObject>>;
    protected listKPIs(parentReference: IdReference, filter?: object): Promise<IResultList<IManagedObject>>;
    protected onBeforeUpdate(objWithId: Partial<IManagedObject>): Partial<IManagedObject>;
    protected onBeforeCreate(managedObject: Partial<IManagedObject>): Partial<IManagedObject>;
    private getChildrenUrl;
    private getChildUrl;
    private listChildren;
    private createChild;
    private addChild;
    private addChildBulk;
    private removeChild;
    private getSupportedMeasurementDetails;
}
//# sourceMappingURL=InventoryService.d.ts.map