/*
 * 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 {
  AlertRuleResource,
  AlertRulesListByResourceGroupOptionalParams,
  AlertRulesListBySubscriptionOptionalParams,
  AlertRulesCreateOrUpdateOptionalParams,
  AlertRulesCreateOrUpdateResponse,
  AlertRulesDeleteOptionalParams,
  AlertRulesGetOptionalParams,
  AlertRulesGetResponse,
  AlertRuleResourcePatch,
  AlertRulesUpdateOptionalParams,
  AlertRulesUpdateResponse
} from "../models";

/// <reference lib="esnext.asynciterable" />
/** Interface representing a AlertRules. */
export interface AlertRules {
  /**
   * List the classic metric alert rules 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?: AlertRulesListByResourceGroupOptionalParams
  ): PagedAsyncIterableIterator<AlertRuleResource>;
  /**
   * List the classic metric alert rules within a subscription.
   * @param options The options parameters.
   */
  listBySubscription(
    options?: AlertRulesListBySubscriptionOptionalParams
  ): PagedAsyncIterableIterator<AlertRuleResource>;
  /**
   * Creates or updates a classic metric alert rule.
   * @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: AlertRuleResource,
    options?: AlertRulesCreateOrUpdateOptionalParams
  ): Promise<AlertRulesCreateOrUpdateResponse>;
  /**
   * Deletes a classic metric alert rule
   * @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?: AlertRulesDeleteOptionalParams
  ): Promise<void>;
  /**
   * Gets a classic metric alert rule
   * @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?: AlertRulesGetOptionalParams
  ): Promise<AlertRulesGetResponse>;
  /**
   * Updates an existing classic metric AlertRuleResource. To update other fields use the CreateOrUpdate
   * method.
   * @param resourceGroupName The name of the resource group. The name is case insensitive.
   * @param ruleName The name of the rule.
   * @param alertRulesResource Parameters supplied to the operation.
   * @param options The options parameters.
   */
  update(
    resourceGroupName: string,
    ruleName: string,
    alertRulesResource: AlertRuleResourcePatch,
    options?: AlertRulesUpdateOptionalParams
  ): Promise<AlertRulesUpdateResponse>;
}
