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

package com.azure.resourcemanager.policyinsights.models;

import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;
import com.azure.resourcemanager.policyinsights.fluent.models.RemediationInner;

/** Resource collection API of Remediations. */
public interface Remediations {
    /**
     * Gets all deployments for a remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @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 all deployments for a remediation at management group scope as paginated response with {@link
     *     PagedIterable}.
     */
    PagedIterable<RemediationDeployment> listDeploymentsAtManagementGroup(
        String managementGroupId, String remediationName);

    /**
     * Gets all deployments for a remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @param top Maximum number of records to return.
     * @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 all deployments for a remediation at management group scope as paginated response with {@link
     *     PagedIterable}.
     */
    PagedIterable<RemediationDeployment> listDeploymentsAtManagementGroup(
        String managementGroupId, String remediationName, Integer top, Context context);

    /**
     * Cancels a remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> cancelAtManagementGroupWithResponse(
        String managementGroupId, String remediationName, Context context);

    /**
     * Cancels a remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @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 remediation definition.
     */
    Remediation cancelAtManagementGroup(String managementGroupId, String remediationName);

    /**
     * Gets all remediations for the management group.
     *
     * @param managementGroupId Management group ID.
     * @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 all remediations for the management group as paginated response with {@link PagedIterable}.
     */
    PagedIterable<Remediation> listForManagementGroup(String managementGroupId);

    /**
     * Gets all remediations for the management group.
     *
     * @param managementGroupId Management group ID.
     * @param top Maximum number of records to return.
     * @param filter OData filter expression.
     * @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 all remediations for the management group as paginated response with {@link PagedIterable}.
     */
    PagedIterable<Remediation> listForManagementGroup(
        String managementGroupId, Integer top, String filter, Context context);

    /**
     * Creates or updates a remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @param parameters The remediation parameters.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> createOrUpdateAtManagementGroupWithResponse(
        String managementGroupId, String remediationName, RemediationInner parameters, Context context);

    /**
     * Creates or updates a remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @param parameters The remediation parameters.
     * @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 remediation definition.
     */
    Remediation createOrUpdateAtManagementGroup(
        String managementGroupId, String remediationName, RemediationInner parameters);

    /**
     * Gets an existing remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @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 an existing remediation at management group scope along with {@link Response}.
     */
    Response<Remediation> getAtManagementGroupWithResponse(
        String managementGroupId, String remediationName, Context context);

    /**
     * Gets an existing remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @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 an existing remediation at management group scope.
     */
    Remediation getAtManagementGroup(String managementGroupId, String remediationName);

    /**
     * Deletes an existing remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> deleteAtManagementGroupWithResponse(
        String managementGroupId, String remediationName, Context context);

    /**
     * Deletes an existing remediation at management group scope.
     *
     * @param managementGroupId Management group ID.
     * @param remediationName The name of the remediation.
     * @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 remediation definition.
     */
    Remediation deleteAtManagementGroup(String managementGroupId, String remediationName);

    /**
     * Gets all deployments for a remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @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 all deployments for a remediation at subscription scope as paginated response with {@link PagedIterable}.
     */
    PagedIterable<RemediationDeployment> listDeploymentsAtSubscription(String remediationName);

    /**
     * Gets all deployments for a remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @param top Maximum number of records to return.
     * @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 all deployments for a remediation at subscription scope as paginated response with {@link PagedIterable}.
     */
    PagedIterable<RemediationDeployment> listDeploymentsAtSubscription(
        String remediationName, Integer top, Context context);

    /**
     * Cancels a remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> cancelAtSubscriptionWithResponse(String remediationName, Context context);

    /**
     * Cancels a remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @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 remediation definition.
     */
    Remediation cancelAtSubscription(String remediationName);

    /**
     * Gets all remediations for the subscription.
     *
     * @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 all remediations for the subscription as paginated response with {@link PagedIterable}.
     */
    PagedIterable<Remediation> list();

    /**
     * Gets all remediations for the subscription.
     *
     * @param top Maximum number of records to return.
     * @param filter OData filter expression.
     * @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 all remediations for the subscription as paginated response with {@link PagedIterable}.
     */
    PagedIterable<Remediation> list(Integer top, String filter, Context context);

    /**
     * Creates or updates a remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @param parameters The remediation parameters.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> createOrUpdateAtSubscriptionWithResponse(
        String remediationName, RemediationInner parameters, Context context);

    /**
     * Creates or updates a remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @param parameters The remediation parameters.
     * @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 remediation definition.
     */
    Remediation createOrUpdateAtSubscription(String remediationName, RemediationInner parameters);

    /**
     * Gets an existing remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @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 an existing remediation at subscription scope along with {@link Response}.
     */
    Response<Remediation> getAtSubscriptionWithResponse(String remediationName, Context context);

    /**
     * Gets an existing remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @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 an existing remediation at subscription scope.
     */
    Remediation getAtSubscription(String remediationName);

    /**
     * Deletes an existing remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> deleteAtSubscriptionWithResponse(String remediationName, Context context);

    /**
     * Deletes an existing remediation at subscription scope.
     *
     * @param remediationName The name of the remediation.
     * @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 remediation definition.
     */
    Remediation deleteAtSubscription(String remediationName);

    /**
     * Gets all deployments for a remediation at resource group scope.
     *
     * @param resourceGroupName Resource group name.
     * @param remediationName The name of the remediation.
     * @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 all deployments for a remediation at resource group scope as paginated response with {@link
     *     PagedIterable}.
     */
    PagedIterable<RemediationDeployment> listDeploymentsAtResourceGroup(
        String resourceGroupName, String remediationName);

    /**
     * Gets all deployments for a remediation at resource group scope.
     *
     * @param resourceGroupName Resource group name.
     * @param remediationName The name of the remediation.
     * @param top Maximum number of records to return.
     * @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 all deployments for a remediation at resource group scope as paginated response with {@link
     *     PagedIterable}.
     */
    PagedIterable<RemediationDeployment> listDeploymentsAtResourceGroup(
        String resourceGroupName, String remediationName, Integer top, Context context);

    /**
     * Cancels a remediation at resource group scope.
     *
     * @param resourceGroupName Resource group name.
     * @param remediationName The name of the remediation.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> cancelAtResourceGroupWithResponse(
        String resourceGroupName, String remediationName, Context context);

    /**
     * Cancels a remediation at resource group scope.
     *
     * @param resourceGroupName Resource group name.
     * @param remediationName The name of the remediation.
     * @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 remediation definition.
     */
    Remediation cancelAtResourceGroup(String resourceGroupName, String remediationName);

    /**
     * Gets all remediations for the subscription.
     *
     * @param resourceGroupName Resource group name.
     * @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 all remediations for the subscription as paginated response with {@link PagedIterable}.
     */
    PagedIterable<Remediation> listByResourceGroup(String resourceGroupName);

    /**
     * Gets all remediations for the subscription.
     *
     * @param resourceGroupName Resource group name.
     * @param top Maximum number of records to return.
     * @param filter OData filter expression.
     * @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 all remediations for the subscription as paginated response with {@link PagedIterable}.
     */
    PagedIterable<Remediation> listByResourceGroup(
        String resourceGroupName, Integer top, String filter, Context context);

    /**
     * Gets an existing remediation at resource group scope.
     *
     * @param resourceGroupName Resource group name.
     * @param remediationName The name of the remediation.
     * @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 an existing remediation at resource group scope along with {@link Response}.
     */
    Response<Remediation> getByResourceGroupWithResponse(
        String resourceGroupName, String remediationName, Context context);

    /**
     * Gets an existing remediation at resource group scope.
     *
     * @param resourceGroupName Resource group name.
     * @param remediationName The name of the remediation.
     * @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 an existing remediation at resource group scope.
     */
    Remediation getByResourceGroup(String resourceGroupName, String remediationName);

    /**
     * Deletes an existing remediation at resource group scope.
     *
     * @param resourceGroupName Resource group name.
     * @param remediationName The name of the remediation.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> deleteByResourceGroupWithResponse(
        String resourceGroupName, String remediationName, Context context);

    /**
     * Deletes an existing remediation at resource group scope.
     *
     * @param resourceGroupName Resource group name.
     * @param remediationName The name of the remediation.
     * @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 remediation definition.
     */
    Remediation deleteByResourceGroup(String resourceGroupName, String remediationName);

    /**
     * Gets all deployments for a remediation at resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @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 all deployments for a remediation at resource scope as paginated response with {@link PagedIterable}.
     */
    PagedIterable<RemediationDeployment> listDeploymentsAtResource(String resourceId, String remediationName);

    /**
     * Gets all deployments for a remediation at resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @param top Maximum number of records to return.
     * @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 all deployments for a remediation at resource scope as paginated response with {@link PagedIterable}.
     */
    PagedIterable<RemediationDeployment> listDeploymentsAtResource(
        String resourceId, String remediationName, Integer top, Context context);

    /**
     * Cancel a remediation at resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> cancelAtResourceWithResponse(String resourceId, String remediationName, Context context);

    /**
     * Cancel a remediation at resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @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 remediation definition.
     */
    Remediation cancelAtResource(String resourceId, String remediationName);

    /**
     * Gets all remediations for a resource.
     *
     * @param resourceId Resource ID.
     * @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 all remediations for a resource as paginated response with {@link PagedIterable}.
     */
    PagedIterable<Remediation> listForResource(String resourceId);

    /**
     * Gets all remediations for a resource.
     *
     * @param resourceId Resource ID.
     * @param top Maximum number of records to return.
     * @param filter OData filter expression.
     * @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 all remediations for a resource as paginated response with {@link PagedIterable}.
     */
    PagedIterable<Remediation> listForResource(String resourceId, Integer top, String filter, Context context);

    /**
     * Creates or updates a remediation at resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @param parameters The remediation parameters.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> createOrUpdateAtResourceWithResponse(
        String resourceId, String remediationName, RemediationInner parameters, Context context);

    /**
     * Creates or updates a remediation at resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @param parameters The remediation parameters.
     * @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 remediation definition.
     */
    Remediation createOrUpdateAtResource(String resourceId, String remediationName, RemediationInner parameters);

    /**
     * Gets an existing remediation at resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @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 an existing remediation at resource scope along with {@link Response}.
     */
    Response<Remediation> getAtResourceWithResponse(String resourceId, String remediationName, Context context);

    /**
     * Gets an existing remediation at resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @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 an existing remediation at resource scope.
     */
    Remediation getAtResource(String resourceId, String remediationName);

    /**
     * Deletes an existing remediation at individual resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> deleteAtResourceWithResponse(String resourceId, String remediationName, Context context);

    /**
     * Deletes an existing remediation at individual resource scope.
     *
     * @param resourceId Resource ID.
     * @param remediationName The name of the remediation.
     * @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 remediation definition.
     */
    Remediation deleteAtResource(String resourceId, String remediationName);

    /**
     * Gets an existing remediation at resource group scope.
     *
     * @param id the resource ID.
     * @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 an existing remediation at resource group scope along with {@link Response}.
     */
    Remediation getById(String id);

    /**
     * Gets an existing remediation at resource group scope.
     *
     * @param id the resource ID.
     * @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 an existing remediation at resource group scope along with {@link Response}.
     */
    Response<Remediation> getByIdWithResponse(String id, Context context);

    /**
     * Deletes an existing remediation at resource group scope.
     *
     * @param id the resource ID.
     * @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 remediation definition along with {@link Response}.
     */
    Remediation deleteById(String id);

    /**
     * Deletes an existing remediation at resource group scope.
     *
     * @param id the resource ID.
     * @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 remediation definition along with {@link Response}.
     */
    Response<Remediation> deleteByIdWithResponse(String id, Context context);

    /**
     * Begins definition for a new Remediation resource.
     *
     * @param name resource name.
     * @return the first stage of the new Remediation definition.
     */
    Remediation.DefinitionStages.Blank define(String name);
}
