// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.resourcemanager.dataprotection.fluent;

import com.azure.core.annotation.ReturnType;
import com.azure.core.annotation.ServiceMethod;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;
import com.azure.resourcemanager.dataprotection.fluent.models.ResourceGuardProxyBaseResourceInner;
import com.azure.resourcemanager.dataprotection.fluent.models.UnlockDeleteResponseInner;
import com.azure.resourcemanager.dataprotection.models.UnlockDeleteRequest;

/** An instance of this class provides access to all the operations defined in DppResourceGuardProxiesClient. */
public interface DppResourceGuardProxiesClient {
    /**
     * Returns the list of ResourceGuardProxies associated with the vault.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return list of ResourceGuardProxyBase resources as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<ResourceGuardProxyBaseResourceInner> list(String resourceGroupName, String vaultName);

    /**
     * Returns the list of ResourceGuardProxies associated with the vault.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return list of ResourceGuardProxyBase resources as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<ResourceGuardProxyBaseResourceInner> list(
        String resourceGroupName, String vaultName, Context context);

    /**
     * Returns the ResourceGuardProxy object associated with the vault, and that matches the name in the request.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param resourceGuardProxyName name of the resource guard proxy.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return resourceGuardProxyBaseResource object, used for response and request bodies for ResourceGuardProxy APIs
     *     along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<ResourceGuardProxyBaseResourceInner> getWithResponse(
        String resourceGroupName, String vaultName, String resourceGuardProxyName, Context context);

    /**
     * Returns the ResourceGuardProxy object associated with the vault, and that matches the name in the request.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param resourceGuardProxyName name of the resource guard proxy.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return resourceGuardProxyBaseResource object, used for response and request bodies for ResourceGuardProxy APIs.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    ResourceGuardProxyBaseResourceInner get(String resourceGroupName, String vaultName, String resourceGuardProxyName);

    /**
     * Creates or Updates a ResourceGuardProxy.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param resourceGuardProxyName name of the resource guard proxy.
     * @param parameters Request body for operation.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return resourceGuardProxyBaseResource object, used for response and request bodies for ResourceGuardProxy APIs
     *     along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<ResourceGuardProxyBaseResourceInner> createOrUpdateWithResponse(
        String resourceGroupName,
        String vaultName,
        String resourceGuardProxyName,
        ResourceGuardProxyBaseResourceInner parameters,
        Context context);

    /**
     * Creates or Updates a ResourceGuardProxy.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param resourceGuardProxyName name of the resource guard proxy.
     * @param parameters Request body for operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return resourceGuardProxyBaseResource object, used for response and request bodies for ResourceGuardProxy APIs.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    ResourceGuardProxyBaseResourceInner createOrUpdate(
        String resourceGroupName,
        String vaultName,
        String resourceGuardProxyName,
        ResourceGuardProxyBaseResourceInner parameters);

    /**
     * Deletes the ResourceGuardProxy.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param resourceGuardProxyName name of the resource guard proxy.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<Void> deleteWithResponse(
        String resourceGroupName, String vaultName, String resourceGuardProxyName, Context context);

    /**
     * Deletes the ResourceGuardProxy.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param resourceGuardProxyName name of the resource guard proxy.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    void delete(String resourceGroupName, String vaultName, String resourceGuardProxyName);

    /**
     * UnlockDelete call for ResourceGuardProxy, executed before one can delete it.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param resourceGuardProxyName name of the resource guard proxy.
     * @param parameters Request body for operation.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return response of Unlock Delete API along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<UnlockDeleteResponseInner> unlockDeleteWithResponse(
        String resourceGroupName,
        String vaultName,
        String resourceGuardProxyName,
        UnlockDeleteRequest parameters,
        Context context);

    /**
     * UnlockDelete call for ResourceGuardProxy, executed before one can delete it.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param vaultName The name of the backup vault.
     * @param resourceGuardProxyName name of the resource guard proxy.
     * @param parameters Request body for operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return response of Unlock Delete API.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    UnlockDeleteResponseInner unlockDelete(
        String resourceGroupName, String vaultName, String resourceGuardProxyName, UnlockDeleteRequest parameters);
}
