/*
 * 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 {
  MetricAlertResource,
  MetricAlertsListBySubscriptionOptionalParams,
  MetricAlertsListByResourceGroupOptionalParams,
  MetricAlertsGetOptionalParams,
  MetricAlertsGetResponse,
  MetricAlertsCreateOrUpdateOptionalParams,
  MetricAlertsCreateOrUpdateResponse,
  MetricAlertResourcePatch,
  MetricAlertsUpdateOptionalParams,
  MetricAlertsUpdateResponse,
  MetricAlertsDeleteOptionalParams
} from "../models";

/// <reference lib="esnext.asynciterable" />
/** Interface representing a MetricAlerts. */
export interface MetricAlerts {
  /**
   * Retrieve alert rule definitions in a subscription.
   * @param options The options parameters.
   */
  listBySubscription(
    options?: MetricAlertsListBySubscriptionOptionalParams
  ): PagedAsyncIterableIterator<MetricAlertResource>;
  /**
   * Retrieve alert rule definitions in 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?: MetricAlertsListByResourceGroupOptionalParams
  ): PagedAsyncIterableIterator<MetricAlertResource>;
  /**
   * Retrieve an alert rule definition.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param ruleName The name of the rule.
   * @param options The options parameters.
   */
  get(
    resourceGroupName: string,
    ruleName: string,
    options?: MetricAlertsGetOptionalParams
  ): Promise<MetricAlertsGetResponse>;
  /**
   * Create or update an metric alert definition.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param ruleName The name of the rule.
   * @param parameters The parameters of the rule to create or update.
   * @param options The options parameters.
   */
  createOrUpdate(
    resourceGroupName: string,
    ruleName: string,
    parameters: MetricAlertResource,
    options?: MetricAlertsCreateOrUpdateOptionalParams
  ): Promise<MetricAlertsCreateOrUpdateResponse>;
  /**
   * Update an metric alert definition.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param ruleName The name of the rule.
   * @param parameters The parameters of the rule to update.
   * @param options The options parameters.
   */
  update(
    resourceGroupName: string,
    ruleName: string,
    parameters: MetricAlertResourcePatch,
    options?: MetricAlertsUpdateOptionalParams
  ): Promise<MetricAlertsUpdateResponse>;
  /**
   * Delete an alert rule definition.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param ruleName The name of the rule.
   * @param options The options parameters.
   */
  delete(
    resourceGroupName: string,
    ruleName: string,
    options?: MetricAlertsDeleteOptionalParams
  ): Promise<void>;
}
