/*
 * 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 {
  DistributionGroupsListAllTestersForOrgOptionalParams,
  DistributionGroupsListAllTestersForOrgResponse,
  DistributionGroupsDetailsForOrgOptionalParams,
  DistributionGroupsDetailsForOrgResponse,
  DistributionGroupsResendSharedInviteOptionalParams,
  DistributionGroupsBulkDeleteUsersOptionalParams,
  DistributionGroupsListUsersForOrgOptionalParams,
  DistributionGroupsListUsersForOrgResponse,
  DistributionGroupsAddUsersForOrgOptionalParams,
  DistributionGroupsAddUsersForOrgResponse,
  DistributionGroupsBulkDeleteAppsOptionalParams,
  DistributionGroupsGetAppsOptionalParams,
  DistributionGroupsGetAppsResponse,
  DistributionGroupsAddAppsOptionalParams,
  DistributionGroupsGetForOrgOptionalParams,
  DistributionGroupsGetForOrgResponse,
  DistributionGroupsPatchForOrgOptionalParams,
  DistributionGroupsPatchForOrgResponse,
  DistributionGroupsDeleteForOrgOptionalParams,
  DistributionGroupsCreateForOrgOptionalParams,
  DistributionGroupsCreateForOrgResponse,
  DistributionGroupsListForOrgOptionalParams,
  DistributionGroupsListForOrgResponse,
  DistributionGroupsResendInviteOptionalParams,
  DistributionGroupsRemoveUserOptionalParams,
  DistributionGroupsRemoveUserResponse,
  DistributionGroupsListUsersOptionalParams,
  DistributionGroupsListUsersResponse,
  DistributionGroupsAddUserOptionalParams,
  DistributionGroupsAddUserResponse,
  DistributionGroupsGetOptionalParams,
  DistributionGroupsGetResponse,
  DistributionGroupsUpdateOptionalParams,
  DistributionGroupsUpdateResponse,
  DistributionGroupsDeleteOptionalParams,
  DistributionGroupsListOptionalParams,
  DistributionGroupsListResponse,
  DistributionGroupsCreateOptionalParams,
  DistributionGroupsCreateResponse
} from "../models";

/** Interface representing a DistributionGroups. */
export interface DistributionGroups {
  /**
   * Returns a unique list of users including the whole organization members plus testers in any shared
   * group of that org
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  listAllTestersForOrg(
    orgName: string,
    options?: DistributionGroupsListAllTestersForOrgOptionalParams
  ): Promise<DistributionGroupsListAllTestersForOrgResponse>;
  /**
   * Returns a list of distribution groups with details for an organization
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  detailsForOrg(
    orgName: string,
    options?: DistributionGroupsDetailsForOrgOptionalParams
  ): Promise<DistributionGroupsDetailsForOrgResponse>;
  /**
   * Resend shared distribution group invite notification to previously invited testers
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  resendSharedInvite(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsResendSharedInviteOptionalParams
  ): Promise<void>;
  /**
   * Delete testers from distribution group in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  bulkDeleteUsers(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsBulkDeleteUsersOptionalParams
  ): Promise<void>;
  /**
   * Returns a list of member in the distribution group specified
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  listUsersForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsListUsersForOrgOptionalParams
  ): Promise<DistributionGroupsListUsersForOrgResponse>;
  /**
   * Accepts an array of user email addresses to get added to the specified group
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  addUsersForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsAddUsersForOrgOptionalParams
  ): Promise<DistributionGroupsAddUsersForOrgResponse>;
  /**
   * Delete apps from distribution group in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  bulkDeleteApps(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsBulkDeleteAppsOptionalParams
  ): Promise<void>;
  /**
   * Get apps from a distribution group in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  getApps(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsGetAppsOptionalParams
  ): Promise<DistributionGroupsGetAppsResponse>;
  /**
   * Add apps to distribution group in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  addApps(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsAddAppsOptionalParams
  ): Promise<void>;
  /**
   * Returns a single distribution group in org for a given distribution group name
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  getForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsGetForOrgOptionalParams
  ): Promise<DistributionGroupsGetForOrgResponse>;
  /**
   * Update one given distribution group name in an org
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  patchForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsPatchForOrgOptionalParams
  ): Promise<DistributionGroupsPatchForOrgResponse>;
  /**
   * Deletes a single distribution group from an org with a given distribution group name
   * @param orgName The organization's name
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  deleteForOrg(
    orgName: string,
    distributionGroupName: string,
    options?: DistributionGroupsDeleteForOrgOptionalParams
  ): Promise<void>;
  /**
   * Creates a disribution goup which can be shared across apps under an organization
   * @param orgName The organization's name
   * @param name The name of the distribution group
   * @param options The options parameters.
   */
  createForOrg(
    orgName: string,
    name: string,
    options?: DistributionGroupsCreateForOrgOptionalParams
  ): Promise<DistributionGroupsCreateForOrgResponse>;
  /**
   * Returns a list of distribution groups in the org specified
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  listForOrg(
    orgName: string,
    options?: DistributionGroupsListForOrgOptionalParams
  ): Promise<DistributionGroupsListForOrgResponse>;
  /**
   * Resend distribution group app invite notification to previously invited testers
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  resendInvite(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsResendInviteOptionalParams
  ): Promise<void>;
  /**
   * Remove the users from the distribution group
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  removeUser(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsRemoveUserOptionalParams
  ): Promise<DistributionGroupsRemoveUserResponse>;
  /**
   * Returns a list of member details in the distribution group specified
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  listUsers(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsListUsersOptionalParams
  ): Promise<DistributionGroupsListUsersResponse>;
  /**
   * Adds the members to the specified distribution group
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  addUser(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsAddUserOptionalParams
  ): Promise<DistributionGroupsAddUserResponse>;
  /**
   * Returns a single distribution group for a given distribution group name
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  get(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsGetOptionalParams
  ): Promise<DistributionGroupsGetResponse>;
  /**
   * Updates the attributes of distribution group
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  update(
    ownerName: string,
    appName: string,
    distributionGroupName: string,
    options?: DistributionGroupsUpdateOptionalParams
  ): Promise<DistributionGroupsUpdateResponse>;
  /**
   * Deletes a distribution group
   * @param appName The name of the application
   * @param ownerName The name of the owner
   * @param distributionGroupName The name of the distribution group
   * @param options The options parameters.
   */
  delete(
    appName: string,
    ownerName: string,
    distributionGroupName: string,
    options?: DistributionGroupsDeleteOptionalParams
  ): Promise<void>;
  /**
   * Returns a list of distribution groups in the app specified
   * @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?: DistributionGroupsListOptionalParams
  ): Promise<DistributionGroupsListResponse>;
  /**
   * Creates a new distribution group and returns it to the caller
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param name The name of the distribution group
   * @param options The options parameters.
   */
  create(
    ownerName: string,
    appName: string,
    name: string,
    options?: DistributionGroupsCreateOptionalParams
  ): Promise<DistributionGroupsCreateResponse>;
}
