/*
 * 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 {
  Zone,
  ZonesListByResourceGroupOptionalParams,
  ZonesListOptionalParams,
  ZonesCreateOrUpdateOptionalParams,
  ZonesCreateOrUpdateResponse,
  ZonesDeleteOptionalParams,
  ZonesGetOptionalParams,
  ZonesGetResponse,
  ZoneUpdate,
  ZonesUpdateOptionalParams,
  ZonesUpdateResponse
} from "../models";

/// <reference lib="esnext.asynciterable" />
/** Interface representing a Zones. */
export interface Zones {
  /**
   * Lists the DNS zones within a resource group.
   * @param resourceGroupName The name of the resource group.
   * @param options The options parameters.
   */
  listByResourceGroup(
    resourceGroupName: string,
    options?: ZonesListByResourceGroupOptionalParams
  ): PagedAsyncIterableIterator<Zone>;
  /**
   * Lists the DNS zones in all resource groups in a subscription.
   * @param options The options parameters.
   */
  list(options?: ZonesListOptionalParams): PagedAsyncIterableIterator<Zone>;
  /**
   * Creates or updates a DNS zone. Does not modify DNS records within the zone.
   * @param resourceGroupName The name of the resource group.
   * @param zoneName The name of the DNS zone (without a terminating dot).
   * @param parameters Parameters supplied to the CreateOrUpdate operation.
   * @param options The options parameters.
   */
  createOrUpdate(
    resourceGroupName: string,
    zoneName: string,
    parameters: Zone,
    options?: ZonesCreateOrUpdateOptionalParams
  ): Promise<ZonesCreateOrUpdateResponse>;
  /**
   * Deletes a DNS zone. WARNING: All DNS records in the zone will also be deleted. This operation cannot
   * be undone.
   * @param resourceGroupName The name of the resource group.
   * @param zoneName The name of the DNS zone (without a terminating dot).
   * @param options The options parameters.
   */
  beginDelete(
    resourceGroupName: string,
    zoneName: string,
    options?: ZonesDeleteOptionalParams
  ): Promise<PollerLike<PollOperationState<void>, void>>;
  /**
   * Deletes a DNS zone. WARNING: All DNS records in the zone will also be deleted. This operation cannot
   * be undone.
   * @param resourceGroupName The name of the resource group.
   * @param zoneName The name of the DNS zone (without a terminating dot).
   * @param options The options parameters.
   */
  beginDeleteAndWait(
    resourceGroupName: string,
    zoneName: string,
    options?: ZonesDeleteOptionalParams
  ): Promise<void>;
  /**
   * Gets a DNS zone. Retrieves the zone properties, but not the record sets within the zone.
   * @param resourceGroupName The name of the resource group.
   * @param zoneName The name of the DNS zone (without a terminating dot).
   * @param options The options parameters.
   */
  get(
    resourceGroupName: string,
    zoneName: string,
    options?: ZonesGetOptionalParams
  ): Promise<ZonesGetResponse>;
  /**
   * Updates a DNS zone. Does not modify DNS records within the zone.
   * @param resourceGroupName The name of the resource group.
   * @param zoneName The name of the DNS zone (without a terminating dot).
   * @param parameters Parameters supplied to the Update operation.
   * @param options The options parameters.
   */
  update(
    resourceGroupName: string,
    zoneName: string,
    parameters: ZoneUpdate,
    options?: ZonesUpdateOptionalParams
  ): Promise<ZonesUpdateResponse>;
}
