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

package com.azure.resourcemanager.recoveryservices.fluent;

import com.azure.core.annotation.ReturnType;
import com.azure.core.annotation.ServiceMethod;
import com.azure.core.http.rest.Response;
import com.azure.core.util.Context;
import com.azure.resourcemanager.recoveryservices.fluent.models.CapabilitiesResponseInner;
import com.azure.resourcemanager.recoveryservices.fluent.models.CheckNameAvailabilityResultInner;
import com.azure.resourcemanager.recoveryservices.models.CheckNameAvailabilityParameters;
import com.azure.resourcemanager.recoveryservices.models.ResourceCapabilities;

/** An instance of this class provides access to all the operations defined in RecoveryServicesClient. */
public interface RecoveryServicesClient {
    /**
     * API to check for resource name availability. A name is available if no other resource exists that has the same
     * SubscriptionId, Resource Name and Type or if one or more such resources exist, each of these must be GC'd and
     * their time of deletion be more than 24 Hours Ago.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param location Location of the resource.
     * @param input Contains information about Resource type and Resource name.
     * @param context The context to associate with this operation.
     * @throws IllegalArgumentException thrown if parameters fail the validation.
     * @throws com.azure.core.management.exception.ManagementException thrown if the request is rejected by server.
     * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent.
     * @return response for check name availability API along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<CheckNameAvailabilityResultInner> checkNameAvailabilityWithResponse(
        String resourceGroupName, String location, CheckNameAvailabilityParameters input, Context context);

    /**
     * API to check for resource name availability. A name is available if no other resource exists that has the same
     * SubscriptionId, Resource Name and Type or if one or more such resources exist, each of these must be GC'd and
     * their time of deletion be more than 24 Hours Ago.
     *
     * @param resourceGroupName The name of the resource group. The name is case insensitive.
     * @param location Location of the resource.
     * @param input Contains information about Resource type and Resource 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 response for check name availability API.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    CheckNameAvailabilityResultInner checkNameAvailability(
        String resourceGroupName, String location, CheckNameAvailabilityParameters input);

    /**
     * API to get details about capabilities provided by Microsoft.RecoveryServices RP.
     *
     * @param location Location of the resource.
     * @param input Contains information about Resource type and properties to get capabilities.
     * @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 capabilities response for Microsoft.RecoveryServices along with {@link Response}.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    Response<CapabilitiesResponseInner> capabilitiesWithResponse(
        String location, ResourceCapabilities input, Context context);

    /**
     * API to get details about capabilities provided by Microsoft.RecoveryServices RP.
     *
     * @param location Location of the resource.
     * @param input Contains information about Resource type and properties to get capabilities.
     * @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 capabilities response for Microsoft.RecoveryServices.
     */
    @ServiceMethod(returns = ReturnType.SINGLE)
    CapabilitiesResponseInner capabilities(String location, ResourceCapabilities input);
}
