import { Service, IIdentified, IResult, ISource, IResultList } from '../core';
import { IUserGroup } from './IUserGroup';
import { IRoleReference } from '../user-role';
import { IUserReference } from '../user';
/**
 * @description
 * This service allows for managing user groups.
 */
export declare class UserGroupService extends Service<IUserGroup> {
    protected baseUrl: string;
    protected propertyName: string;
    protected get listUrl(): string;
    /**
     * Gets the details of given user group.
     *
     * @param {string|number|IUserGroup} entityOrId Group's id or role object.
     *
     * @returns Returns promise object that is resolved with the IUserGroup wrapped by IResult.
     *
     * **Example**
     * ```typescript
     *
     *    const groupId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await userGroupService.detail(roleId);
     *   })();
     * ```
     */
    detail(entityOrId: string | number | IUserGroup): Promise<IResult<IUserGroup>>;
    /**
     * Creates a new user group.
     *
     * @param {IUserGroup} entity User Group object.
     *
     * @returns {IResult<IUserGroup>} Returns promise object that is resolved with
     * the details of newly created user group.
     *
     * **Example**
     * ```typescript
     *
     *  const userGroupObject: IUserGroup = {
     *    name: "new user group"
     *  };
     *
     *  (async () => {
     *    const {data, res} = await userGroupService.create(userGroupObject);
     *  })();
     * ```
     */
    create(entity: Partial<IUserGroup>): Promise<IResult<IUserGroup>>;
    /**
     * Updates user group data.
     *
     * @param {Partial<IUserGroup>} entity User group is partially updatable.
     *
     * @returns {IResult<IUserGroup>} Returns promise object that is resolved with the saved user group object.
     *
     * **Example**
     * ```typescript
     *
     *  const partialUpdateObject: Partial<IUserGroup> = {
     *     "id" : 1,
     *     "self" : "[URL to this resource]",
     *     "name" : "PlatformAdministrators",
     *     ...
     *   }
     *
     *  (async () => {
     *    const {data, res} = await userGroupService.update(partialUpdateObject);
     *  })();
     * ```
     */
    update(entity: Partial<IUserGroup>): Promise<IResult<IUserGroup>>;
    /**
     * Gets the list of user groups filtered by parameters.
     *
     * @param {object} filter Object containing filters for querying User Groups.
     *
     * @returns Returns promise object that is resolved with the IUserGroup wrapped by IResultList.
     *
     * **Example**
     * ```typescript
     *
     *  const filter: object = {
     *     severity: Severity.MAJOR,
     *     pageSize: 100,
     *     withTotalPages: true
     *   };
     *
     *   (async () => {
     *     const {data, res, paging} = await userGroupService.list(filter);
     *   })();
     * ```
     */
    list(filter?: object): Promise<IResultList<IUserGroup>>;
    /**
     * Removes user group.
     *
     * @param {number | IIdentified} entityOrId User group's id or user group object.
     *
     * @returns Returns promise object that is resolved with the IResult of null.
     *
     * **Example**
     * ```typescript
     *
     *    const userGroupId: number = 1;
     *
     *    (async () => {
     *      const {data, res} = await userGroupService.delete(userGroupId);
     *   })();
     * ```
     * When group is removed, suitable audit records are created with type 'User'
     * and activity 'User updated' with information that user has been removed from group.
     *
     * Please, note that the ADMINS and DEVICES groups can not be deleted.
     */
    delete(entityOrId: number | IIdentified): Promise<IResult<null>>;
    /**
     * Assign role to user group.
     *
     * @param {string | number | Partial<IUserGroup>} entityOrId User group's id or user group object.
     * @param {string | Partial<ISource>} childEntityOrSelf Url to role resource or IRoleReference object.
     *
     * @returns Returns promise object that is resolved with the IRoleReference wrapped by IResult.
     *
     * **Example**
     * ```typescript
     *
     *    const userGroupId: number = 1;
     *    const roleResource: string = "[URL to the Role resource]";
     *
     *    (async () => {
     *      const {data, res} = await userGroupService.addRoleToGroup(userGroupId, roleResource);
     *   })();
     * ```
     * When role is assigned to user, suitable audit record is created with type 'User' and activity 'User updated'.
     */
    addRoleToGroup(entityOrId: string | number | Partial<IUserGroup>, childEntityOrSelf: string | Partial<ISource>): Promise<IResult<IRoleReference>>;
    /**
     * Unassign role from user
     *
     * @param {string | number | Partial<IUserGroup>} entityOrId User group's id or user group object.
     * @param {string | Partial<ISource>} childEntityOrSelf Url to user resource or IRoleReference object.
     *
     * @returns Returns promise object that is resolved with the IResult of null.
     *
     * **Example**
     * ```typescript
     *
     *    const userGroupId: number = 1;
     *    const userResource: string = "[URL to the Role resource]";
     *
     *    (async () => {
     *      const {data, res} = await userGroupService.removeRoleFromGroup(userGroupId, userResource);
     *   })();
     * ```
     */
    removeRoleFromGroup(entityOrId: string | number | Partial<IUserGroup>, childEntityOrSelf: string | Partial<ISource>): Promise<IResult<null>>;
    /**
     * Assign user to user group.
     *
     * @param {string | number | Partial<IUserGroup>} entityOrId User group's id or user group object.
     * @param {string | Partial<ISource>} childEntityOrSelf Url to user resource or IUserReference object.
     *
     * @returns Returns promise object that is resolved with the IUserReference wrapped by IResult.
     *
     * **Example**
     * ```typescript
     *
     *    const userGroupId: number = 1;
     *    const userResource: string = "[URL to the User resource]";
     *
     *    (async () => {
     *      const {data, res} = await userGroupService.addUserToGroup(userGroupId, userResource);
     *   })();
     * ```
     * When user is added to group, suitable audit record is created with type 'User' and activity 'User updated'.
     */
    addUserToGroup(entityOrId: string | number | Partial<IUserGroup>, childEntityOrSelf: string | Partial<ISource>): Promise<IResult<IUserReference>>;
    /**
     * Remove user from a group
     *
     * @param {string | number | Partial<IUserGroup>} entityOrId User group's id or user group object.
     * @param {string | Partial<ISource>} childEntityOrSelf Url to user resource or IUserReference object.
     *
     * @returns Returns promise object that is resolved with the IResult of null.
     *
     * **Example**
     * ```typescript
     *
     *    const userGroupId: number = 1;
     *    const userResource: string = "[URL to the User resource]";
     *
     *    (async () => {
     *      const {data, res} = await userGroupService.removeUserFromGroup(userGroupId, userResource);
     *   })();
     * ```
     * When user is removed from group, suitable audit record is created with type 'User' and activity 'User updated'.
     */
    removeUserFromGroup(entityOrId: string | number | Partial<IUserGroup>, childEntityOrSelf: string | Partial<ISource>): Promise<IResult<null>>;
    protected getSelf(childReference: string | Partial<ISource>): string;
    private getChildUrl;
    private getChildReferenceAsBody;
    private addChild;
    private removeChild;
}
//# sourceMappingURL=UserGroupService.d.ts.map