/*
 * 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 {
  TeamsRemoveUserOptionalParams,
  TeamsGetUsersOptionalParams,
  TeamsGetUsersResponse,
  TeamsAddUserOptionalParams,
  TeamsAddUserResponse,
  PatchContentSchemaPermissionsItem,
  TeamsUpdatePermissionsOptionalParams,
  TeamsUpdatePermissionsResponse,
  TeamsRemoveAppOptionalParams,
  TeamsAddAppOptionalParams,
  TeamsAddAppResponse,
  TeamsListAppsOptionalParams,
  TeamsListAppsResponse,
  TeamsGetTeamOptionalParams,
  TeamsGetTeamResponse,
  TeamsDeleteOptionalParams,
  TeamsUpdateOptionalParams,
  TeamsUpdateResponse,
  TeamsListAllOptionalParams,
  TeamsListAllResponse,
  TeamsCreateTeamOptionalParams,
  TeamsCreateTeamResponse
} from "../models";

/** Interface representing a Teams. */
export interface Teams {
  /**
   * Removes a user from a team that is owned by an organization
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param userName The slug name of the user
   * @param options The options parameters.
   */
  removeUser(
    orgName: string,
    teamName: string,
    userName: string,
    options?: TeamsRemoveUserOptionalParams
  ): Promise<void>;
  /**
   * Returns the users of a team which is owned by an organization
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param options The options parameters.
   */
  getUsers(
    orgName: string,
    teamName: string,
    options?: TeamsGetUsersOptionalParams
  ): Promise<TeamsGetUsersResponse>;
  /**
   * Adds a new user to a team that is owned by an organization
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param userEmail The user's email address
   * @param options The options parameters.
   */
  addUser(
    orgName: string,
    teamName: string,
    userEmail: string,
    options?: TeamsAddUserOptionalParams
  ): Promise<TeamsAddUserResponse>;
  /**
   * Updates the permissions the team has to the app
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param appName The name of the application
   * @param permissions The permissions all members of the team have on the app
   * @param options The options parameters.
   */
  updatePermissions(
    orgName: string,
    teamName: string,
    appName: string,
    permissions: PatchContentSchemaPermissionsItem[],
    options?: TeamsUpdatePermissionsOptionalParams
  ): Promise<TeamsUpdatePermissionsResponse>;
  /**
   * Removes an app from a team
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param appName The name of the application
   * @param options The options parameters.
   */
  removeApp(
    orgName: string,
    teamName: string,
    appName: string,
    options?: TeamsRemoveAppOptionalParams
  ): Promise<void>;
  /**
   * Adds an app to a team
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param name The name of the app to be added to the distribution group
   * @param options The options parameters.
   */
  addApp(
    orgName: string,
    teamName: string,
    name: string,
    options?: TeamsAddAppOptionalParams
  ): Promise<TeamsAddAppResponse>;
  /**
   * Returns the apps a team has access to
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param options The options parameters.
   */
  listApps(
    orgName: string,
    teamName: string,
    options?: TeamsListAppsOptionalParams
  ): Promise<TeamsListAppsResponse>;
  /**
   * Returns the details of a single team
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param options The options parameters.
   */
  getTeam(
    orgName: string,
    teamName: string,
    options?: TeamsGetTeamOptionalParams
  ): Promise<TeamsGetTeamResponse>;
  /**
   * Deletes a single team
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param options The options parameters.
   */
  delete(
    orgName: string,
    teamName: string,
    options?: TeamsDeleteOptionalParams
  ): Promise<void>;
  /**
   * Updates a single team
   * @param orgName The organization's name
   * @param teamName The team's name
   * @param displayName The new display name of the team
   * @param options The options parameters.
   */
  update(
    orgName: string,
    teamName: string,
    displayName: string,
    options?: TeamsUpdateOptionalParams
  ): Promise<TeamsUpdateResponse>;
  /**
   * Returns the list of all teams in this org
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  listAll(
    orgName: string,
    options?: TeamsListAllOptionalParams
  ): Promise<TeamsListAllResponse>;
  /**
   * Creates a team and returns it
   * @param orgName The organization's name
   * @param displayName The display name of the team
   * @param options The options parameters.
   */
  createTeam(
    orgName: string,
    displayName: string,
    options?: TeamsCreateTeamOptionalParams
  ): Promise<TeamsCreateTeamResponse>;
}
