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

package com.azure.resourcemanager.recoveryservicesbackup.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;

/** The BackupResourceEncryptionConfig model. */
@Fluent
public class BackupResourceEncryptionConfig {
    /*
     * Encryption At Rest Type
     */
    @JsonProperty(value = "encryptionAtRestType")
    private EncryptionAtRestType encryptionAtRestType;

    /*
     * Key Vault Key URI
     */
    @JsonProperty(value = "keyUri")
    private String keyUri;

    /*
     * Key Vault Subscription Id
     */
    @JsonProperty(value = "subscriptionId")
    private String subscriptionId;

    /*
     * The lastUpdateStatus property.
     */
    @JsonProperty(value = "lastUpdateStatus")
    private LastUpdateStatus lastUpdateStatus;

    /*
     * The infrastructureEncryptionState property.
     */
    @JsonProperty(value = "infrastructureEncryptionState")
    private InfrastructureEncryptionState infrastructureEncryptionState;

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

    /**
     * Get the encryptionAtRestType property: Encryption At Rest Type.
     *
     * @return the encryptionAtRestType value.
     */
    public EncryptionAtRestType encryptionAtRestType() {
        return this.encryptionAtRestType;
    }

    /**
     * Set the encryptionAtRestType property: Encryption At Rest Type.
     *
     * @param encryptionAtRestType the encryptionAtRestType value to set.
     * @return the BackupResourceEncryptionConfig object itself.
     */
    public BackupResourceEncryptionConfig withEncryptionAtRestType(EncryptionAtRestType encryptionAtRestType) {
        this.encryptionAtRestType = encryptionAtRestType;
        return this;
    }

    /**
     * Get the keyUri property: Key Vault Key URI.
     *
     * @return the keyUri value.
     */
    public String keyUri() {
        return this.keyUri;
    }

    /**
     * Set the keyUri property: Key Vault Key URI.
     *
     * @param keyUri the keyUri value to set.
     * @return the BackupResourceEncryptionConfig object itself.
     */
    public BackupResourceEncryptionConfig withKeyUri(String keyUri) {
        this.keyUri = keyUri;
        return this;
    }

    /**
     * Get the subscriptionId property: Key Vault Subscription Id.
     *
     * @return the subscriptionId value.
     */
    public String subscriptionId() {
        return this.subscriptionId;
    }

    /**
     * Set the subscriptionId property: Key Vault Subscription Id.
     *
     * @param subscriptionId the subscriptionId value to set.
     * @return the BackupResourceEncryptionConfig object itself.
     */
    public BackupResourceEncryptionConfig withSubscriptionId(String subscriptionId) {
        this.subscriptionId = subscriptionId;
        return this;
    }

    /**
     * Get the lastUpdateStatus property: The lastUpdateStatus property.
     *
     * @return the lastUpdateStatus value.
     */
    public LastUpdateStatus lastUpdateStatus() {
        return this.lastUpdateStatus;
    }

    /**
     * Set the lastUpdateStatus property: The lastUpdateStatus property.
     *
     * @param lastUpdateStatus the lastUpdateStatus value to set.
     * @return the BackupResourceEncryptionConfig object itself.
     */
    public BackupResourceEncryptionConfig withLastUpdateStatus(LastUpdateStatus lastUpdateStatus) {
        this.lastUpdateStatus = lastUpdateStatus;
        return this;
    }

    /**
     * Get the infrastructureEncryptionState property: The infrastructureEncryptionState property.
     *
     * @return the infrastructureEncryptionState value.
     */
    public InfrastructureEncryptionState infrastructureEncryptionState() {
        return this.infrastructureEncryptionState;
    }

    /**
     * Set the infrastructureEncryptionState property: The infrastructureEncryptionState property.
     *
     * @param infrastructureEncryptionState the infrastructureEncryptionState value to set.
     * @return the BackupResourceEncryptionConfig object itself.
     */
    public BackupResourceEncryptionConfig withInfrastructureEncryptionState(
        InfrastructureEncryptionState infrastructureEncryptionState) {
        this.infrastructureEncryptionState = infrastructureEncryptionState;
        return this;
    }

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