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

package com.azure.resourcemanager.deviceprovisioningservices.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.management.polling.PollResult;
import com.azure.core.util.Context;
import com.azure.core.util.polling.SyncPoller;
import com.azure.resourcemanager.deviceprovisioningservices.fluent.models.AsyncOperationResultInner;
import com.azure.resourcemanager.deviceprovisioningservices.fluent.models.GroupIdInformationInner;
import com.azure.resourcemanager.deviceprovisioningservices.fluent.models.IotDpsSkuDefinitionInner;
import com.azure.resourcemanager.deviceprovisioningservices.fluent.models.NameAvailabilityInfoInner;
import com.azure.resourcemanager.deviceprovisioningservices.fluent.models.PrivateEndpointConnectionInner;
import com.azure.resourcemanager.deviceprovisioningservices.fluent.models.PrivateLinkResourcesInner;
import com.azure.resourcemanager.deviceprovisioningservices.fluent.models.ProvisioningServiceDescriptionInner;
import com.azure.resourcemanager.deviceprovisioningservices.fluent.models.SharedAccessSignatureAuthorizationRuleInner;
import com.azure.resourcemanager.deviceprovisioningservices.models.OperationInputs;
import com.azure.resourcemanager.deviceprovisioningservices.models.TagsResource;
import java.util.List;

/** An instance of this class provides access to all the operations defined in IotDpsResourcesClient. */
public interface IotDpsResourcesClient {
    /**
     * Get the metadata of the provisioning service without SAS keys.
     *
     * @param resourceGroupName Resource group name.
     * @param provisioningServiceName Name of the provisioning service to retrieve.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the metadata of the provisioning service without SAS keys.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    ProvisioningServiceDescriptionInner getByResourceGroup(String resourceGroupName, String provisioningServiceName);

    /**
     * Get the metadata of the provisioning service without SAS keys.
     *
     * @param resourceGroupName Resource group name.
     * @param provisioningServiceName Name of the provisioning service to retrieve.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the metadata of the provisioning service without SAS keys along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<ProvisioningServiceDescriptionInner> getByResourceGroupWithResponse(
        String resourceGroupName, String provisioningServiceName, Context context);

    /**
     * Create or update the metadata of the provisioning service. The usual pattern to modify a property is to retrieve
     * the provisioning service metadata and security metadata, and then combine them with the modified values in a new
     * body to update the provisioning service.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to create or update.
     * @param iotDpsDescription Description of the provisioning service to create or update.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 SyncPoller} for polling of the description of the provisioning service.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<ProvisioningServiceDescriptionInner>, ProvisioningServiceDescriptionInner>
        beginCreateOrUpdate(
            String resourceGroupName,
            String provisioningServiceName,
            ProvisioningServiceDescriptionInner iotDpsDescription);

    /**
     * Create or update the metadata of the provisioning service. The usual pattern to modify a property is to retrieve
     * the provisioning service metadata and security metadata, and then combine them with the modified values in a new
     * body to update the provisioning service.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to create or update.
     * @param iotDpsDescription Description of the provisioning service to create or update.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 SyncPoller} for polling of the description of the provisioning service.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<ProvisioningServiceDescriptionInner>, ProvisioningServiceDescriptionInner>
        beginCreateOrUpdate(
            String resourceGroupName,
            String provisioningServiceName,
            ProvisioningServiceDescriptionInner iotDpsDescription,
            Context context);

    /**
     * Create or update the metadata of the provisioning service. The usual pattern to modify a property is to retrieve
     * the provisioning service metadata and security metadata, and then combine them with the modified values in a new
     * body to update the provisioning service.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to create or update.
     * @param iotDpsDescription Description of the provisioning service to create or update.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the description of the provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    ProvisioningServiceDescriptionInner createOrUpdate(
        String resourceGroupName,
        String provisioningServiceName,
        ProvisioningServiceDescriptionInner iotDpsDescription);

    /**
     * Create or update the metadata of the provisioning service. The usual pattern to modify a property is to retrieve
     * the provisioning service metadata and security metadata, and then combine them with the modified values in a new
     * body to update the provisioning service.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to create or update.
     * @param iotDpsDescription Description of the provisioning service to create or update.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the description of the provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    ProvisioningServiceDescriptionInner createOrUpdate(
        String resourceGroupName,
        String provisioningServiceName,
        ProvisioningServiceDescriptionInner iotDpsDescription,
        Context context);

    /**
     * Update an existing provisioning service's tags. to update other fields use the CreateOrUpdate method.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to create or update.
     * @param provisioningServiceTags Updated tag information to set into the provisioning service instance.
     * @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 SyncPoller} for polling of the description of the provisioning service.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<ProvisioningServiceDescriptionInner>, ProvisioningServiceDescriptionInner> beginUpdate(
        String resourceGroupName, String provisioningServiceName, TagsResource provisioningServiceTags);

    /**
     * Update an existing provisioning service's tags. to update other fields use the CreateOrUpdate method.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to create or update.
     * @param provisioningServiceTags Updated tag information to set into the provisioning service instance.
     * @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 SyncPoller} for polling of the description of the provisioning service.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<ProvisioningServiceDescriptionInner>, ProvisioningServiceDescriptionInner> beginUpdate(
        String resourceGroupName,
        String provisioningServiceName,
        TagsResource provisioningServiceTags,
        Context context);

    /**
     * Update an existing provisioning service's tags. to update other fields use the CreateOrUpdate method.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to create or update.
     * @param provisioningServiceTags Updated tag information to set into the provisioning service instance.
     * @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 description of the provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    ProvisioningServiceDescriptionInner update(
        String resourceGroupName, String provisioningServiceName, TagsResource provisioningServiceTags);

    /**
     * Update an existing provisioning service's tags. to update other fields use the CreateOrUpdate method.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to create or update.
     * @param provisioningServiceTags Updated tag information to set into the provisioning service instance.
     * @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 description of the provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    ProvisioningServiceDescriptionInner update(
        String resourceGroupName,
        String provisioningServiceName,
        TagsResource provisioningServiceTags,
        Context context);

    /**
     * Deletes the Provisioning Service.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to delete.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginDelete(String resourceGroupName, String provisioningServiceName);

    /**
     * Deletes the Provisioning Service.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to delete.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 SyncPoller} for polling of long-running operation.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<Void>, Void> beginDelete(
        String resourceGroupName, String provisioningServiceName, Context context);

    /**
     * Deletes the Provisioning Service.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to delete.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 provisioningServiceName);

    /**
     * Deletes the Provisioning Service.
     *
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service to delete.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 provisioningServiceName, Context context);

    /**
     * List all the provisioning services for a given subscription id.
     *
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 provisioning service descriptions as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<ProvisioningServiceDescriptionInner> list();

    /**
     * List all the provisioning services for a given subscription id.
     *
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 provisioning service descriptions as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<ProvisioningServiceDescriptionInner> list(Context context);

    /**
     * Get a list of all provisioning services in the given resource group.
     *
     * @param resourceGroupName Resource group identifier.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 provisioning services in the given resource group as paginated response with {@link
     *     PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<ProvisioningServiceDescriptionInner> listByResourceGroup(String resourceGroupName);

    /**
     * Get a list of all provisioning services in the given resource group.
     *
     * @param resourceGroupName Resource group identifier.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 provisioning services in the given resource group as paginated response with {@link
     *     PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<ProvisioningServiceDescriptionInner> listByResourceGroup(String resourceGroupName, Context context);

    /**
     * Gets the status of a long running operation, such as create, update or delete a provisioning service.
     *
     * @param operationId Operation id corresponding to long running operation. Use this to poll for the status.
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service that the operation is running on.
     * @param asyncinfo Async header used to poll on the status of the operation, obtained while creating the long
     *     running operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the status of a long running operation, such as create, update or delete a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    AsyncOperationResultInner getOperationResult(
        String operationId, String resourceGroupName, String provisioningServiceName, String asyncinfo);

    /**
     * Gets the status of a long running operation, such as create, update or delete a provisioning service.
     *
     * @param operationId Operation id corresponding to long running operation. Use this to poll for the status.
     * @param resourceGroupName Resource group identifier.
     * @param provisioningServiceName Name of provisioning service that the operation is running on.
     * @param asyncinfo Async header used to poll on the status of the operation, obtained while creating the long
     *     running operation.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the status of a long running operation, such as create, update or delete a provisioning service along
     *     with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<AsyncOperationResultInner> getOperationResultWithResponse(
        String operationId,
        String resourceGroupName,
        String provisioningServiceName,
        String asyncinfo,
        Context context);

    /**
     * Gets the list of valid SKUs and tiers for a provisioning service.
     *
     * @param provisioningServiceName Name of provisioning service.
     * @param resourceGroupName Name of resource group.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the list of valid SKUs and tiers for a provisioning service as paginated response with {@link
     *     PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<IotDpsSkuDefinitionInner> listValidSkus(String provisioningServiceName, String resourceGroupName);

    /**
     * Gets the list of valid SKUs and tiers for a provisioning service.
     *
     * @param provisioningServiceName Name of provisioning service.
     * @param resourceGroupName Name of resource group.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the list of valid SKUs and tiers for a provisioning service as paginated response with {@link
     *     PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<IotDpsSkuDefinitionInner> listValidSkus(
        String provisioningServiceName, String resourceGroupName, Context context);

    /**
     * Check if a provisioning service name is available. This will validate if the name is syntactically valid and if
     * the name is usable.
     *
     * @param arguments Set the name parameter in the OperationInputs structure to the name of the provisioning service
     *     to check.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return description of name availability.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    NameAvailabilityInfoInner checkProvisioningServiceNameAvailability(OperationInputs arguments);

    /**
     * Check if a provisioning service name is available. This will validate if the name is syntactically valid and if
     * the name is usable.
     *
     * @param arguments Set the name parameter in the OperationInputs structure to the name of the provisioning service
     *     to check.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return description of name availability along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<NameAvailabilityInfoInner> checkProvisioningServiceNameAvailabilityWithResponse(
        OperationInputs arguments, Context context);

    /**
     * List the primary and secondary keys for a provisioning service.
     *
     * @param provisioningServiceName The provisioning service name to get the shared access keys for.
     * @param resourceGroupName resource group name.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 shared access keys as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<SharedAccessSignatureAuthorizationRuleInner> listKeys(
        String provisioningServiceName, String resourceGroupName);

    /**
     * List the primary and secondary keys for a provisioning service.
     *
     * @param provisioningServiceName The provisioning service name to get the shared access keys for.
     * @param resourceGroupName resource group name.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 shared access keys as paginated response with {@link PagedIterable}.
     */
    @ServiceMethod(returns = ReturnType.COLLECTION)
    PagedIterable<SharedAccessSignatureAuthorizationRuleInner> listKeys(
        String provisioningServiceName, String resourceGroupName, Context context);

    /**
     * List primary and secondary keys for a specific key name.
     *
     * @param provisioningServiceName Name of the provisioning service.
     * @param keyName Logical key name to get key-values for.
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return description of the shared access key.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    SharedAccessSignatureAuthorizationRuleInner listKeysForKeyName(
        String provisioningServiceName, String keyName, String resourceGroupName);

    /**
     * List primary and secondary keys for a specific key name.
     *
     * @param provisioningServiceName Name of the provisioning service.
     * @param keyName Logical key name to get key-values for.
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return description of the shared access key along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<SharedAccessSignatureAuthorizationRuleInner> listKeysForKeyNameWithResponse(
        String provisioningServiceName, String keyName, String resourceGroupName, Context context);

    /**
     * List private link resources for the given provisioning service.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the available private link resources for a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    PrivateLinkResourcesInner listPrivateLinkResources(String resourceGroupName, String resourceName);

    /**
     * List private link resources for the given provisioning service.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the available private link resources for a provisioning service along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<PrivateLinkResourcesInner> listPrivateLinkResourcesWithResponse(
        String resourceGroupName, String resourceName, Context context);

    /**
     * Get the specified private link resource for the given provisioning service.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param groupId The name of the private link resource.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the specified private link resource for the given provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    GroupIdInformationInner getPrivateLinkResources(String resourceGroupName, String resourceName, String groupId);

    /**
     * Get the specified private link resource for the given provisioning service.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param groupId The name of the private link resource.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the specified private link resource for the given provisioning service along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<GroupIdInformationInner> getPrivateLinkResourcesWithResponse(
        String resourceGroupName, String resourceName, String groupId, Context context);

    /**
     * List private endpoint connection properties.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the list of private endpoint connections for a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    List<PrivateEndpointConnectionInner> listPrivateEndpointConnections(String resourceGroupName, String resourceName);

    /**
     * List private endpoint connection properties.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the list of private endpoint connections for a provisioning service along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<List<PrivateEndpointConnectionInner>> listPrivateEndpointConnectionsWithResponse(
        String resourceGroupName, String resourceName, Context context);

    /**
     * Get private endpoint connection properties.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return private endpoint connection properties.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    PrivateEndpointConnectionInner getPrivateEndpointConnection(
        String resourceGroupName, String resourceName, String privateEndpointConnectionName);

    /**
     * Get private endpoint connection properties.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return private endpoint connection properties along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<PrivateEndpointConnectionInner> getPrivateEndpointConnectionWithResponse(
        String resourceGroupName, String resourceName, String privateEndpointConnectionName, Context context);

    /**
     * Create or update the status of a private endpoint connection with the specified name.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @param privateEndpointConnection The private endpoint connection with updated properties.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 SyncPoller} for polling of the private endpoint connection of a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<PrivateEndpointConnectionInner>, PrivateEndpointConnectionInner>
        beginCreateOrUpdatePrivateEndpointConnection(
            String resourceGroupName,
            String resourceName,
            String privateEndpointConnectionName,
            PrivateEndpointConnectionInner privateEndpointConnection);

    /**
     * Create or update the status of a private endpoint connection with the specified name.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @param privateEndpointConnection The private endpoint connection with updated properties.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 SyncPoller} for polling of the private endpoint connection of a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<PrivateEndpointConnectionInner>, PrivateEndpointConnectionInner>
        beginCreateOrUpdatePrivateEndpointConnection(
            String resourceGroupName,
            String resourceName,
            String privateEndpointConnectionName,
            PrivateEndpointConnectionInner privateEndpointConnection,
            Context context);

    /**
     * Create or update the status of a private endpoint connection with the specified name.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @param privateEndpointConnection The private endpoint connection with updated properties.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the private endpoint connection of a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    PrivateEndpointConnectionInner createOrUpdatePrivateEndpointConnection(
        String resourceGroupName,
        String resourceName,
        String privateEndpointConnectionName,
        PrivateEndpointConnectionInner privateEndpointConnection);

    /**
     * Create or update the status of a private endpoint connection with the specified name.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @param privateEndpointConnection The private endpoint connection with updated properties.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the private endpoint connection of a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    PrivateEndpointConnectionInner createOrUpdatePrivateEndpointConnection(
        String resourceGroupName,
        String resourceName,
        String privateEndpointConnectionName,
        PrivateEndpointConnectionInner privateEndpointConnection,
        Context context);

    /**
     * Delete private endpoint connection with the specified name.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 SyncPoller} for polling of the private endpoint connection of a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<PrivateEndpointConnectionInner>, PrivateEndpointConnectionInner>
        beginDeletePrivateEndpointConnection(
            String resourceGroupName, String resourceName, String privateEndpointConnectionName);

    /**
     * Delete private endpoint connection with the specified name.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException 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 SyncPoller} for polling of the private endpoint connection of a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.LONG_RUNNING_OPERATION)
    SyncPoller<PollResult<PrivateEndpointConnectionInner>, PrivateEndpointConnectionInner>
        beginDeletePrivateEndpointConnection(
            String resourceGroupName, String resourceName, String privateEndpointConnectionName, Context context);

    /**
     * Delete private endpoint connection with the specified name.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the private endpoint connection of a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    PrivateEndpointConnectionInner deletePrivateEndpointConnection(
        String resourceGroupName, String resourceName, String privateEndpointConnectionName);

    /**
     * Delete private endpoint connection with the specified name.
     *
     * @param resourceGroupName The name of the resource group that contains the provisioning service.
     * @param resourceName The name of the provisioning service.
     * @param privateEndpointConnectionName The name of the private endpoint connection.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.resourcemanager.deviceprovisioningservices.models.ErrorDetailsException thrown if the request
     *     is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return the private endpoint connection of a provisioning service.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    PrivateEndpointConnectionInner deletePrivateEndpointConnection(
        String resourceGroupName, String resourceName, String privateEndpointConnectionName, Context context);
}
