/*
 * 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 { PollerLike, PollOperationState } from "@azure/core-lro";
import {
  AzureMonitorPrivateLinkScope,
  PrivateLinkScopesListOptionalParams,
  PrivateLinkScopesListByResourceGroupOptionalParams,
  PrivateLinkScopesDeleteOptionalParams,
  PrivateLinkScopesGetOptionalParams,
  PrivateLinkScopesGetResponse,
  PrivateLinkScopesCreateOrUpdateOptionalParams,
  PrivateLinkScopesCreateOrUpdateResponse,
  TagsResource,
  PrivateLinkScopesUpdateTagsOptionalParams,
  PrivateLinkScopesUpdateTagsResponse
} from "../models";

/// <reference lib="esnext.asynciterable" />
/** Interface representing a PrivateLinkScopes. */
export interface PrivateLinkScopes {
  /**
   * Gets a list of all Azure Monitor PrivateLinkScopes within a subscription.
   * @param options The options parameters.
   */
  list(
    options?: PrivateLinkScopesListOptionalParams
  ): PagedAsyncIterableIterator<AzureMonitorPrivateLinkScope>;
  /**
   * Gets a list of Azure Monitor PrivateLinkScopes within a resource group.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param options The options parameters.
   */
  listByResourceGroup(
    resourceGroupName: string,
    options?: PrivateLinkScopesListByResourceGroupOptionalParams
  ): PagedAsyncIterableIterator<AzureMonitorPrivateLinkScope>;
  /**
   * Deletes a Azure Monitor PrivateLinkScope.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param scopeName The name of the Azure Monitor PrivateLinkScope resource.
   * @param options The options parameters.
   */
  beginDelete(
    resourceGroupName: string,
    scopeName: string,
    options?: PrivateLinkScopesDeleteOptionalParams
  ): Promise<PollerLike<PollOperationState<void>, void>>;
  /**
   * Deletes a Azure Monitor PrivateLinkScope.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param scopeName The name of the Azure Monitor PrivateLinkScope resource.
   * @param options The options parameters.
   */
  beginDeleteAndWait(
    resourceGroupName: string,
    scopeName: string,
    options?: PrivateLinkScopesDeleteOptionalParams
  ): Promise<void>;
  /**
   * Returns a Azure Monitor PrivateLinkScope.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param scopeName The name of the Azure Monitor PrivateLinkScope resource.
   * @param options The options parameters.
   */
  get(
    resourceGroupName: string,
    scopeName: string,
    options?: PrivateLinkScopesGetOptionalParams
  ): Promise<PrivateLinkScopesGetResponse>;
  /**
   * Creates (or updates) a Azure Monitor PrivateLinkScope. Note: You cannot specify a different value
   * for InstrumentationKey nor AppId in the Put operation.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param scopeName The name of the Azure Monitor PrivateLinkScope resource.
   * @param azureMonitorPrivateLinkScopePayload Properties that need to be specified to create or update
   *                                            a Azure Monitor PrivateLinkScope.
   * @param options The options parameters.
   */
  createOrUpdate(
    resourceGroupName: string,
    scopeName: string,
    azureMonitorPrivateLinkScopePayload: AzureMonitorPrivateLinkScope,
    options?: PrivateLinkScopesCreateOrUpdateOptionalParams
  ): Promise<PrivateLinkScopesCreateOrUpdateResponse>;
  /**
   * Updates an existing PrivateLinkScope's tags. To update other fields use the CreateOrUpdate method.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param scopeName The name of the Azure Monitor PrivateLinkScope resource.
   * @param privateLinkScopeTags Updated tag information to set into the PrivateLinkScope instance.
   * @param options The options parameters.
   */
  updateTags(
    resourceGroupName: string,
    scopeName: string,
    privateLinkScopeTags: TagsResource,
    options?: PrivateLinkScopesUpdateTagsOptionalParams
  ): Promise<PrivateLinkScopesUpdateTagsResponse>;
}
