// 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.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;

/** Azure specific reprotect input. */
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "instanceType")
@JsonTypeName("HyperVReplicaAzure")
@Fluent
public final class HyperVReplicaAzureReprotectInput extends ReverseReplicationProviderSpecificInput {
    /*
     * The Hyper-V host Vm Id.
     */
    @JsonProperty(value = "hvHostVmId")
    private String hvHostVmId;

    /*
     * The Vm Name.
     */
    @JsonProperty(value = "vmName")
    private String vmName;

    /*
     * The OS type associated with vm.
     */
    @JsonProperty(value = "osType")
    private String osType;

    /*
     * The OS disk VHD id associated with vm.
     */
    @JsonProperty(value = "vHDId")
    private String vHDId;

    /*
     * The storage account name.
     */
    @JsonProperty(value = "storageAccountId")
    private String storageAccountId;

    /*
     * The storage account to be used for logging during replication.
     */
    @JsonProperty(value = "logStorageAccountId")
    private String logStorageAccountId;

    /** Creates an instance of HyperVReplicaAzureReprotectInput class. */
    public HyperVReplicaAzureReprotectInput() {
    }

    /**
     * Get the hvHostVmId property: The Hyper-V host Vm Id.
     *
     * @return the hvHostVmId value.
     */
    public String hvHostVmId() {
        return this.hvHostVmId;
    }

    /**
     * Set the hvHostVmId property: The Hyper-V host Vm Id.
     *
     * @param hvHostVmId the hvHostVmId value to set.
     * @return the HyperVReplicaAzureReprotectInput object itself.
     */
    public HyperVReplicaAzureReprotectInput withHvHostVmId(String hvHostVmId) {
        this.hvHostVmId = hvHostVmId;
        return this;
    }

    /**
     * Get the vmName property: The Vm Name.
     *
     * @return the vmName value.
     */
    public String vmName() {
        return this.vmName;
    }

    /**
     * Set the vmName property: The Vm Name.
     *
     * @param vmName the vmName value to set.
     * @return the HyperVReplicaAzureReprotectInput object itself.
     */
    public HyperVReplicaAzureReprotectInput withVmName(String vmName) {
        this.vmName = vmName;
        return this;
    }

    /**
     * Get the osType property: The OS type associated with vm.
     *
     * @return the osType value.
     */
    public String osType() {
        return this.osType;
    }

    /**
     * Set the osType property: The OS type associated with vm.
     *
     * @param osType the osType value to set.
     * @return the HyperVReplicaAzureReprotectInput object itself.
     */
    public HyperVReplicaAzureReprotectInput withOsType(String osType) {
        this.osType = osType;
        return this;
    }

    /**
     * Get the vHDId property: The OS disk VHD id associated with vm.
     *
     * @return the vHDId value.
     */
    public String vHDId() {
        return this.vHDId;
    }

    /**
     * Set the vHDId property: The OS disk VHD id associated with vm.
     *
     * @param vHDId the vHDId value to set.
     * @return the HyperVReplicaAzureReprotectInput object itself.
     */
    public HyperVReplicaAzureReprotectInput withVHDId(String vHDId) {
        this.vHDId = vHDId;
        return this;
    }

    /**
     * Get the storageAccountId property: The storage account name.
     *
     * @return the storageAccountId value.
     */
    public String storageAccountId() {
        return this.storageAccountId;
    }

    /**
     * Set the storageAccountId property: The storage account name.
     *
     * @param storageAccountId the storageAccountId value to set.
     * @return the HyperVReplicaAzureReprotectInput object itself.
     */
    public HyperVReplicaAzureReprotectInput withStorageAccountId(String storageAccountId) {
        this.storageAccountId = storageAccountId;
        return this;
    }

    /**
     * Get the logStorageAccountId property: The storage account to be used for logging during replication.
     *
     * @return the logStorageAccountId value.
     */
    public String logStorageAccountId() {
        return this.logStorageAccountId;
    }

    /**
     * Set the logStorageAccountId property: The storage account to be used for logging during replication.
     *
     * @param logStorageAccountId the logStorageAccountId value to set.
     * @return the HyperVReplicaAzureReprotectInput object itself.
     */
    public HyperVReplicaAzureReprotectInput withLogStorageAccountId(String logStorageAccountId) {
        this.logStorageAccountId = logStorageAccountId;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    @Override
    public void validate() {
        super.validate();
    }
}
