/*
 * Copyright (c) Microsoft Corporation.
 * Licensed under the MIT License.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is regenerated.
 */

import {
  UsersGetUserMetadataOptionalParams,
  UsersGetUserMetadataResponse,
  UsersGetOptionalParams,
  UsersGetResponse,
  UsersUpdateOptionalParams,
  UsersUpdateResponse,
  UsersUpdateOrgRoleOptionalParams,
  UsersUpdateOrgRoleResponse,
  UsersRemoveFromOrgOptionalParams,
  UsersGetForOrgOptionalParams,
  UsersGetForOrgResponse,
  UsersListForOrgOptionalParams,
  UsersListForOrgResponse,
  UsersListOptionalParams,
  UsersListResponse
} from "../models";

/** Interface representing a Users. */
export interface Users {
  /**
   * test
   * @param options The options parameters.
   */
  getUserMetadata(
    options?: UsersGetUserMetadataOptionalParams
  ): Promise<UsersGetUserMetadataResponse>;
  /**
   * Returns the user profile data
   * @param options The options parameters.
   */
  get(options?: UsersGetOptionalParams): Promise<UsersGetResponse>;
  /**
   * Updates the user profile and returns the updated user data
   * @param options The options parameters.
   */
  update(options?: UsersUpdateOptionalParams): Promise<UsersUpdateResponse>;
  /**
   * Updates the given organization user
   * @param orgName The organization's name
   * @param userName The slug name of the user
   * @param options The options parameters.
   */
  updateOrgRole(
    orgName: string,
    userName: string,
    options?: UsersUpdateOrgRoleOptionalParams
  ): Promise<UsersUpdateOrgRoleResponse>;
  /**
   * Removes a user from an organization.
   * @param orgName The organization's name
   * @param userName The slug name of the user
   * @param options The options parameters.
   */
  removeFromOrg(
    orgName: string,
    userName: string,
    options?: UsersRemoveFromOrgOptionalParams
  ): Promise<void>;
  /**
   * Get a user information from an organization by name - if there is explicit permission return it, if
   * not if not return highest implicit permission
   * @param orgName The organization's name
   * @param userName The slug name of the user
   * @param options The options parameters.
   */
  getForOrg(
    orgName: string,
    userName: string,
    options?: UsersGetForOrgOptionalParams
  ): Promise<UsersGetForOrgResponse>;
  /**
   * Returns a list of users that belong to an organization
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  listForOrg(
    orgName: string,
    options?: UsersListForOrgOptionalParams
  ): Promise<UsersListForOrgResponse>;
  /**
   * Returns the users associated with the app specified with the given app name which belongs to the
   * given owner.
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  list(
    ownerName: string,
    appName: string,
    options?: UsersListOptionalParams
  ): Promise<UsersListResponse>;
}
