/*
 * 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 { PagedAsyncIterableIterator } from "@azure/core-paging";
import { SimplePollerLike, OperationState } from "@azure/core-lro";
import {
  ContainerApp,
  ContainerAppsListBySubscriptionOptionalParams,
  ContainerAppsListByResourceGroupOptionalParams,
  ContainerAppsGetOptionalParams,
  ContainerAppsGetResponse,
  ContainerAppsCreateOrUpdateOptionalParams,
  ContainerAppsCreateOrUpdateResponse,
  ContainerAppsDeleteOptionalParams,
  ContainerAppsListSecretsOptionalParams,
  ContainerAppsListSecretsResponse
} from "../models";

/// <reference lib="esnext.asynciterable" />
/** Interface representing a ContainerApps. */
export interface ContainerApps {
  /**
   * Get the Container Apps in a given subscription.
   * @param options The options parameters.
   */
  listBySubscription(
    options?: ContainerAppsListBySubscriptionOptionalParams
  ): PagedAsyncIterableIterator<ContainerApp>;
  /**
   * Get the Container Apps in a given resource group.
   * @param resourceGroupName Name of the resource group to which the resource belongs.
   * @param options The options parameters.
   */
  listByResourceGroup(
    resourceGroupName: string,
    options?: ContainerAppsListByResourceGroupOptionalParams
  ): PagedAsyncIterableIterator<ContainerApp>;
  /**
   * Get the properties of a Container App.
   * @param resourceGroupName Name of the resource group to which the resource belongs.
   * @param name Name of the Container App.
   * @param options The options parameters.
   */
  get(
    resourceGroupName: string,
    name: string,
    options?: ContainerAppsGetOptionalParams
  ): Promise<ContainerAppsGetResponse>;
  /**
   * Description for Create or update a Container App.
   * @param resourceGroupName Name of the resource group to which the resource belongs.
   * @param name Name of the Container App.
   * @param containerAppEnvelope Container App.
   * @param options The options parameters.
   */
  beginCreateOrUpdate(
    resourceGroupName: string,
    name: string,
    containerAppEnvelope: ContainerApp,
    options?: ContainerAppsCreateOrUpdateOptionalParams
  ): Promise<
    SimplePollerLike<
      OperationState<ContainerAppsCreateOrUpdateResponse>,
      ContainerAppsCreateOrUpdateResponse
    >
  >;
  /**
   * Description for Create or update a Container App.
   * @param resourceGroupName Name of the resource group to which the resource belongs.
   * @param name Name of the Container App.
   * @param containerAppEnvelope Container App.
   * @param options The options parameters.
   */
  beginCreateOrUpdateAndWait(
    resourceGroupName: string,
    name: string,
    containerAppEnvelope: ContainerApp,
    options?: ContainerAppsCreateOrUpdateOptionalParams
  ): Promise<ContainerAppsCreateOrUpdateResponse>;
  /**
   * Description for Delete a Container App.
   * @param resourceGroupName Name of the resource group to which the resource belongs.
   * @param name Name of the Container App.
   * @param options The options parameters.
   */
  beginDelete(
    resourceGroupName: string,
    name: string,
    options?: ContainerAppsDeleteOptionalParams
  ): Promise<SimplePollerLike<OperationState<void>, void>>;
  /**
   * Description for Delete a Container App.
   * @param resourceGroupName Name of the resource group to which the resource belongs.
   * @param name Name of the Container App.
   * @param options The options parameters.
   */
  beginDeleteAndWait(
    resourceGroupName: string,
    name: string,
    options?: ContainerAppsDeleteOptionalParams
  ): Promise<void>;
  /**
   * List secrets for a container app
   * @param name Name of the Container App.
   * @param options The options parameters.
   */
  listSecrets(
    name: string,
    options?: ContainerAppsListSecretsOptionalParams
  ): Promise<ContainerAppsListSecretsResponse>;
}
