/*
 * 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 {
  AppsGetForOrgUserOptionalParams,
  AppsGetForOrgUserResponse,
  PathsDf5UdfV01OrgsOrgNameAppsPostRequestbodyContentApplicationJsonSchema,
  AppsCreateForOrgOptionalParams,
  AppsCreateForOrgResponse,
  AppsListForOrgOptionalParams,
  AppsListForOrgResponse,
  AppsRemoveUserOptionalParams,
  Enum183,
  AppsUpdateUserPermissionsOptionalParams,
  AppsTransferToOrgOptionalParams,
  AppsTransferToOrgResponse,
  AppsTransferOwnershipOptionalParams,
  AppsTransferOwnershipResponse,
  AppsListTestersOptionalParams,
  AppsListTestersResponse,
  AppsGetTeamsOptionalParams,
  AppsGetTeamsResponse,
  AppsUpdateAvatarOptionalParams,
  AppsUpdateAvatarResponse,
  AppsDeleteAvatarOptionalParams,
  AppsDeleteAvatarResponse,
  AppsGetOptionalParams,
  AppsGetResponse,
  AppsUpdateOptionalParams,
  AppsUpdateResponse,
  AppsDeleteOptionalParams,
  Paths1XqwatgV01AppsPostRequestbodyContentApplicationJsonSchema,
  AppsCreateOptionalParams,
  AppsCreateResponse,
  AppsListOptionalParams,
  AppsListResponse
} from "../models";

/** Interface representing a Apps. */
export interface Apps {
  /**
   * Get a user apps information from an organization by name
   * @param orgName The organization's name
   * @param userName The slug name of the user
   * @param options The options parameters.
   */
  getForOrgUser(
    orgName: string,
    userName: string,
    options?: AppsGetForOrgUserOptionalParams
  ): Promise<AppsGetForOrgUserResponse>;
  /**
   * Creates a new app for the organization and returns it to the caller
   * @param orgName The organization's name
   * @param app The data for the app
   * @param options The options parameters.
   */
  createForOrg(
    orgName: string,
    app: PathsDf5UdfV01OrgsOrgNameAppsPostRequestbodyContentApplicationJsonSchema,
    options?: AppsCreateForOrgOptionalParams
  ): Promise<AppsCreateForOrgResponse>;
  /**
   * Returns a list of apps for the organization
   * @param orgName The organization's name
   * @param options The options parameters.
   */
  listForOrg(
    orgName: string,
    options?: AppsListForOrgOptionalParams
  ): Promise<AppsListForOrgResponse>;
  /**
   * Removes the user from the app
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param userEmail The user email of the user to delete
   * @param options The options parameters.
   */
  removeUser(
    ownerName: string,
    appName: string,
    userEmail: string,
    options?: AppsRemoveUserOptionalParams
  ): Promise<void>;
  /**
   * Update user permission for the app
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param userEmail The user email of the user to patch
   * @param permissions The permissions the user has for the app
   * @param options The options parameters.
   */
  updateUserPermissions(
    ownerName: string,
    appName: string,
    userEmail: string,
    permissions: Enum183[],
    options?: AppsUpdateUserPermissionsOptionalParams
  ): Promise<void>;
  /**
   * Transfers ownership of an app to a new organization
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  transferToOrg(
    ownerName: string,
    appName: string,
    options?: AppsTransferToOrgOptionalParams
  ): Promise<AppsTransferToOrgResponse>;
  /**
   * Transfers ownership of an app to a different user or organization
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param destinationOwnerName The name of the owner (user or organization) to which the app is being
   *                             transferred
   * @param options The options parameters.
   */
  transferOwnership(
    ownerName: string,
    appName: string,
    destinationOwnerName: string,
    options?: AppsTransferOwnershipOptionalParams
  ): Promise<AppsTransferOwnershipResponse>;
  /**
   * Returns the testers 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.
   */
  listTesters(
    ownerName: string,
    appName: string,
    options?: AppsListTestersOptionalParams
  ): Promise<AppsListTestersResponse>;
  /**
   * Returns the details of all teams that have access to the app.
   * @param appName The name of the application
   * @param ownerName The name of the owner
   * @param options The options parameters.
   */
  getTeams(
    appName: string,
    ownerName: string,
    options?: AppsGetTeamsOptionalParams
  ): Promise<AppsGetTeamsResponse>;
  /**
   * Sets the app avatar
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  updateAvatar(
    ownerName: string,
    appName: string,
    options?: AppsUpdateAvatarOptionalParams
  ): Promise<AppsUpdateAvatarResponse>;
  /**
   * Deletes the uploaded app avatar
   * @param ownerName The name of the owner
   * @param appName The name of the application
   * @param options The options parameters.
   */
  deleteAvatar(
    ownerName: string,
    appName: string,
    options?: AppsDeleteAvatarOptionalParams
  ): Promise<AppsDeleteAvatarResponse>;
  /**
   * Return a specific app 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.
   */
  get(
    ownerName: string,
    appName: string,
    options?: AppsGetOptionalParams
  ): Promise<AppsGetResponse>;
  /**
   * Partially updates a single app
   * @param appName The name of the application
   * @param ownerName The name of the owner
   * @param options The options parameters.
   */
  update(
    appName: string,
    ownerName: string,
    options?: AppsUpdateOptionalParams
  ): Promise<AppsUpdateResponse>;
  /**
   * Delete an app
   * @param appName The name of the application
   * @param ownerName The name of the owner
   * @param options The options parameters.
   */
  delete(
    appName: string,
    ownerName: string,
    options?: AppsDeleteOptionalParams
  ): Promise<void>;
  /**
   * Creates a new app and returns it to the caller
   * @param app The data for the app
   * @param options The options parameters.
   */
  create(
    app: Paths1XqwatgV01AppsPostRequestbodyContentApplicationJsonSchema,
    options?: AppsCreateOptionalParams
  ): Promise<AppsCreateResponse>;
  /**
   * Returns a list of apps
   * @param options The options parameters.
   */
  list(options?: AppsListOptionalParams): Promise<AppsListResponse>;
}
