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

package com.azure.resourcemanager.security.models;

import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;

/** Resource collection API of GovernanceRules. */
public interface GovernanceRules {
    /**
     * Get a list of all relevant governance rules over a scope.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @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 a list of all relevant governance rules over a scope as paginated response with {@link PagedIterable}.
     */
    PagedIterable<GovernanceRule> list(String scope);

    /**
     * Get a list of all relevant governance rules over a scope.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @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 a list of all relevant governance rules over a scope as paginated response with {@link PagedIterable}.
     */
    PagedIterable<GovernanceRule> list(String scope, Context context);

    /**
     * Get a specific governance rule for the requested scope by ruleId.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @param ruleId The governance rule key - unique key for the standard governance rule (GUID).
     * @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 a specific governance rule for the requested scope by ruleId along with {@link Response}.
     */
    Response<GovernanceRule> getWithResponse(String scope, String ruleId, Context context);

    /**
     * Get a specific governance rule for the requested scope by ruleId.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @param ruleId The governance rule key - unique key for the standard governance rule (GUID).
     * @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 a specific governance rule for the requested scope by ruleId.
     */
    GovernanceRule get(String scope, String ruleId);

    /**
     * Delete a Governance rule over a given scope.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @param ruleId The governance rule key - unique key for the standard governance rule (GUID).
     * @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.
     */
    void deleteByResourceGroup(String scope, String ruleId);

    /**
     * Delete a Governance rule over a given scope.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @param ruleId The governance rule key - unique key for the standard governance rule (GUID).
     * @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.
     */
    void delete(String scope, String ruleId, Context context);

    /**
     * Execute a governance rule.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @param ruleId The governance rule key - unique key for the standard governance rule (GUID).
     * @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.
     */
    void execute(String scope, String ruleId);

    /**
     * Execute a governance rule.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @param ruleId The governance rule key - unique key for the standard governance rule (GUID).
     * @param executeGovernanceRuleParams Execute governance rule over a given scope.
     * @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.
     */
    void execute(String scope, String ruleId, ExecuteGovernanceRuleParams executeGovernanceRuleParams, Context context);

    /**
     * Get governance rules long run operation result for the requested scope by ruleId and operationId.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @param ruleId The governance rule key - unique key for the standard governance rule (GUID).
     * @param operationId The governance rule long running operation unique key.
     * @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 governance rules long run operation result for the requested scope by ruleId and operationId.
     */
    Response<OperationResultAutoGenerated> operationResultsWithResponse(
        String scope, String ruleId, String operationId, Context context);

    /**
     * Get governance rules long run operation result for the requested scope by ruleId and operationId.
     *
     * @param scope The scope of the Governance rules. Valid scopes are: management group (format:
     *     'providers/Microsoft.Management/managementGroups/{managementGroup}'), subscription (format:
     *     'subscriptions/{subscriptionId}'), or security connector (format:
     *     'subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/securityConnectors/{securityConnectorName})'.
     * @param ruleId The governance rule key - unique key for the standard governance rule (GUID).
     * @param operationId The governance rule long running operation unique key.
     * @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 governance rules long run operation result for the requested scope by ruleId and operationId.
     */
    OperationResultAutoGenerated operationResults(String scope, String ruleId, String operationId);

    /**
     * Get a specific governance rule for the requested scope by ruleId.
     *
     * @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 a specific governance rule for the requested scope by ruleId along with {@link Response}.
     */
    GovernanceRule getById(String id);

    /**
     * Get a specific governance rule for the requested scope by ruleId.
     *
     * @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 a specific governance rule for the requested scope by ruleId along with {@link Response}.
     */
    Response<GovernanceRule> getByIdWithResponse(String id, Context context);

    /**
     * Delete a Governance rule over a given 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.
     */
    void deleteById(String id);

    /**
     * Delete a Governance rule over a given 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.
     */
    void deleteByIdWithResponse(String id, Context context);

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