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

package com.azure.resourcemanager.recoveryservicessiterecovery.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 ReplicationProtectedItems. */
public interface ReplicationProtectedItems {
    /**
     * Gets the list of Replication protected items.
     *
     * <p>Gets the list of ASR replication protected items in the protection container.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric name.
     * @param protectionContainerName Protection container 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 the list of ASR replication protected items in the protection container as paginated response with {@link
     *     PagedIterable}.
     */
    PagedIterable<ReplicationProtectedItem> listByReplicationProtectionContainers(
        String resourceName, String resourceGroupName, String fabricName, String protectionContainerName);

    /**
     * Gets the list of Replication protected items.
     *
     * <p>Gets the list of ASR replication protected items in the protection container.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric name.
     * @param protectionContainerName Protection container 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 the list of ASR replication protected items in the protection container as paginated response with {@link
     *     PagedIterable}.
     */
    PagedIterable<ReplicationProtectedItem> listByReplicationProtectionContainers(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        Context context);

    /**
     * Gets the details of a Replication protected item.
     *
     * <p>Gets the details of an ASR replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric unique name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item 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 the details of an ASR replication protected item along with {@link Response}.
     */
    Response<ReplicationProtectedItem> getWithResponse(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        Context context);

    /**
     * Gets the details of a Replication protected item.
     *
     * <p>Gets the details of an ASR replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric unique name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item 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 the details of an ASR replication protected item.
     */
    ReplicationProtectedItem get(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName);

    /**
     * Purges protection.
     *
     * <p>The operation to delete or purge a replication protected item. This operation will force delete the
     * replication protected item. Use the remove operation on replication protected item to perform a clean disable
     * replication for the item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item 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.
     */
    void purge(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName);

    /**
     * Purges protection.
     *
     * <p>The operation to delete or purge a replication protected item. This operation will force delete the
     * replication protected item. Use the remove operation on replication protected item to perform a clean disable
     * replication for the item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item 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.
     */
    void purge(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        Context context);

    /**
     * Add disk(s) for protection.
     *
     * <p>Operation to add disks(s) to the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param addDisksInput Add disks input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem addDisks(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        AddDisksInput addDisksInput);

    /**
     * Add disk(s) for protection.
     *
     * <p>Operation to add disks(s) to the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param addDisksInput Add disks input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem addDisks(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        AddDisksInput addDisksInput,
        Context context);

    /**
     * Change or apply recovery point.
     *
     * <p>The operation to change the recovery point of a failed over replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName The ARM fabric name.
     * @param protectionContainerName The protection container name.
     * @param replicatedProtectedItemName The replicated protected item name.
     * @param applyRecoveryPointInput The ApplyRecoveryPointInput.
     * @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 replication protected item.
     */
    ReplicationProtectedItem applyRecoveryPoint(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        ApplyRecoveryPointInput applyRecoveryPointInput);

    /**
     * Change or apply recovery point.
     *
     * <p>The operation to change the recovery point of a failed over replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName The ARM fabric name.
     * @param protectionContainerName The protection container name.
     * @param replicatedProtectedItemName The replicated protected item name.
     * @param applyRecoveryPointInput The ApplyRecoveryPointInput.
     * @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 replication protected item.
     */
    ReplicationProtectedItem applyRecoveryPoint(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        ApplyRecoveryPointInput applyRecoveryPointInput,
        Context context);

    /**
     * Execute cancel failover.
     *
     * <p>Operation to cancel the failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item 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 replication protected item.
     */
    ReplicationProtectedItem failoverCancel(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName);

    /**
     * Execute cancel failover.
     *
     * <p>Operation to cancel the failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item 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 replication protected item.
     */
    ReplicationProtectedItem failoverCancel(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        Context context);

    /**
     * Execute commit failover.
     *
     * <p>Operation to commit the failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item 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 replication protected item.
     */
    ReplicationProtectedItem failoverCommit(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName);

    /**
     * Execute commit failover.
     *
     * <p>Operation to commit the failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item 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 replication protected item.
     */
    ReplicationProtectedItem failoverCommit(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        Context context);

    /**
     * Execute planned failover.
     *
     * <p>Operation to initiate a planned failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param failoverInput Planned failover input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem plannedFailover(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        PlannedFailoverInput failoverInput);

    /**
     * Execute planned failover.
     *
     * <p>Operation to initiate a planned failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param failoverInput Planned failover input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem plannedFailover(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        PlannedFailoverInput failoverInput,
        Context context);

    /**
     * Disables protection.
     *
     * <p>The operation to disable replication on a replication protected item. This will also remove the item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param disableProtectionInput Disable protection input.
     * @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 resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        DisableProtectionInput disableProtectionInput);

    /**
     * Disables protection.
     *
     * <p>The operation to disable replication on a replication protected item. This will also remove the item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param disableProtectionInput Disable protection input.
     * @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 resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        DisableProtectionInput disableProtectionInput,
        Context context);

    /**
     * Removes disk(s).
     *
     * <p>Operation to remove disk(s) from the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param removeDisksInput Remove disks input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem removeDisks(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        RemoveDisksInput removeDisksInput);

    /**
     * Removes disk(s).
     *
     * <p>Operation to remove disk(s) from the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param removeDisksInput Remove disks input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem removeDisks(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        RemoveDisksInput removeDisksInput,
        Context context);

    /**
     * Resynchronize or repair replication.
     *
     * <p>The operation to start resynchronize/repair replication for a replication protected item requiring
     * resynchronization.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName The name of the fabric.
     * @param protectionContainerName The name of the container.
     * @param replicatedProtectedItemName The name of the replication protected item.
     * @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 replication protected item.
     */
    ReplicationProtectedItem repairReplication(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName);

    /**
     * Resynchronize or repair replication.
     *
     * <p>The operation to start resynchronize/repair replication for a replication protected item requiring
     * resynchronization.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName The name of the fabric.
     * @param protectionContainerName The name of the container.
     * @param replicatedProtectedItemName The name of the replication protected item.
     * @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 replication protected item.
     */
    ReplicationProtectedItem repairReplication(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        Context context);

    /**
     * Execute Reverse Replication\Reprotect.
     *
     * <p>Operation to reprotect or reverse replicate a failed over replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param reprotectInput Reverse replication input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem reprotect(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        ReverseReplicationInput reprotectInput);

    /**
     * Execute Reverse Replication\Reprotect.
     *
     * <p>Operation to reprotect or reverse replicate a failed over replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param reprotectInput Reverse replication input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem reprotect(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        ReverseReplicationInput reprotectInput,
        Context context);

    /**
     * Resolve health errors.
     *
     * <p>Operation to resolve health issues of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param resolveHealthInput Health issue input object.
     * @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 replication protected item.
     */
    ReplicationProtectedItem resolveHealthErrors(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        ResolveHealthInput resolveHealthInput);

    /**
     * Resolve health errors.
     *
     * <p>Operation to resolve health issues of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param resolveHealthInput Health issue input object.
     * @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 replication protected item.
     */
    ReplicationProtectedItem resolveHealthErrors(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        ResolveHealthInput resolveHealthInput,
        Context context);

    /**
     * Execute switch provider.
     *
     * <p>Operation to initiate a switch provider of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param switchProviderInput Switch provider input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem switchProvider(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        SwitchProviderInput switchProviderInput);

    /**
     * Execute switch provider.
     *
     * <p>Operation to initiate a switch provider of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param switchProviderInput Switch provider input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem switchProvider(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        SwitchProviderInput switchProviderInput,
        Context context);

    /**
     * Execute test failover.
     *
     * <p>Operation to perform a test failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param testfailoverInput Test failover input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem testFailover(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        TestFailoverInput testfailoverInput);

    /**
     * Execute test failover.
     *
     * <p>Operation to perform a test failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param testfailoverInput Test failover input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem testFailover(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        TestFailoverInput testfailoverInput,
        Context context);

    /**
     * Execute test failover cleanup.
     *
     * <p>Operation to clean up the test failover of a replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param cleanupInput Test failover cleanup input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem testFailoverCleanup(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        TestFailoverCleanupInput cleanupInput);

    /**
     * Execute test failover cleanup.
     *
     * <p>Operation to clean up the test failover of a replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param cleanupInput Test failover cleanup input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem testFailoverCleanup(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        TestFailoverCleanupInput cleanupInput,
        Context context);

    /**
     * Execute unplanned failover.
     *
     * <p>Operation to initiate a failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param failoverInput Failover input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem unplannedFailover(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        UnplannedFailoverInput failoverInput);

    /**
     * Execute unplanned failover.
     *
     * <p>Operation to initiate a failover of the replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Unique fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param failoverInput Failover input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem unplannedFailover(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        UnplannedFailoverInput failoverInput,
        Context context);

    /**
     * Updates appliance for replication protected Item.
     *
     * <p>The operation to update appliance of an ASR replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param applianceUpdateInput Appliance update protection input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem updateAppliance(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        UpdateApplianceForReplicationProtectedItemInput applianceUpdateInput);

    /**
     * Updates appliance for replication protected Item.
     *
     * <p>The operation to update appliance of an ASR replication protected item.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName Fabric name.
     * @param protectionContainerName Protection container name.
     * @param replicatedProtectedItemName Replication protected item name.
     * @param applianceUpdateInput Appliance update protection input.
     * @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 replication protected item.
     */
    ReplicationProtectedItem updateAppliance(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        UpdateApplianceForReplicationProtectedItemInput applianceUpdateInput,
        Context context);

    /**
     * Update the mobility service on a protected item.
     *
     * <p>The operation to update(push update) the installed mobility service software on a replication protected item
     * to the latest available version.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName The name of the fabric containing the protected item.
     * @param protectionContainerName The name of the container containing the protected item.
     * @param replicatedProtectedItemName The name of the protected item on which the agent is to be updated.
     * @param updateMobilityServiceRequest Request to update the mobility service on the protected item.
     * @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 replication protected item.
     */
    ReplicationProtectedItem updateMobilityService(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        UpdateMobilityServiceRequest updateMobilityServiceRequest);

    /**
     * Update the mobility service on a protected item.
     *
     * <p>The operation to update(push update) the installed mobility service software on a replication protected item
     * to the latest available version.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param fabricName The name of the fabric containing the protected item.
     * @param protectionContainerName The name of the container containing the protected item.
     * @param replicatedProtectedItemName The name of the protected item on which the agent is to be updated.
     * @param updateMobilityServiceRequest Request to update the mobility service on the protected item.
     * @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 replication protected item.
     */
    ReplicationProtectedItem updateMobilityService(
        String resourceName,
        String resourceGroupName,
        String fabricName,
        String protectionContainerName,
        String replicatedProtectedItemName,
        UpdateMobilityServiceRequest updateMobilityServiceRequest,
        Context context);

    /**
     * Gets the list of replication protected items.
     *
     * <p>Gets the list of ASR replication protected items in the vault.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @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 list of ASR replication protected items in the vault as paginated response with {@link
     *     PagedIterable}.
     */
    PagedIterable<ReplicationProtectedItem> list(String resourceName, String resourceGroupName);

    /**
     * Gets the list of replication protected items.
     *
     * <p>Gets the list of ASR replication protected items in the vault.
     *
     * @param resourceName The name of the recovery services vault.
     * @param resourceGroupName The name of the resource group where the recovery services vault is present.
     * @param skipToken The pagination token. Possible values: "FabricId" or "FabricId_CloudId" or null.
     * @param filter OData filter options.
     * @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 list of ASR replication protected items in the vault as paginated response with {@link
     *     PagedIterable}.
     */
    PagedIterable<ReplicationProtectedItem> list(
        String resourceName, String resourceGroupName, String skipToken, String filter, Context context);

    /**
     * Gets the details of a Replication protected item.
     *
     * <p>Gets the details of an ASR replication protected item.
     *
     * @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 details of an ASR replication protected item along with {@link Response}.
     */
    ReplicationProtectedItem getById(String id);

    /**
     * Gets the details of a Replication protected item.
     *
     * <p>Gets the details of an ASR replication protected item.
     *
     * @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 details of an ASR replication protected item along with {@link Response}.
     */
    Response<ReplicationProtectedItem> getByIdWithResponse(String id, Context context);

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