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

package com.azure.resourcemanager.dataprotection.models;

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

/** Backup Vault Contract for Patch Backup Vault API. */
@Fluent
public final class PatchBackupVaultInput {
    /*
     * Monitoring Settings
     */
    @JsonProperty(value = "monitoringSettings")
    private MonitoringSettings monitoringSettings;

    /*
     * Security Settings
     */
    @JsonProperty(value = "securitySettings")
    private SecuritySettings securitySettings;

    /*
     * Feature Settings
     */
    @JsonProperty(value = "featureSettings")
    private FeatureSettings featureSettings;

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

    /**
     * Get the monitoringSettings property: Monitoring Settings.
     *
     * @return the monitoringSettings value.
     */
    public MonitoringSettings monitoringSettings() {
        return this.monitoringSettings;
    }

    /**
     * Set the monitoringSettings property: Monitoring Settings.
     *
     * @param monitoringSettings the monitoringSettings value to set.
     * @return the PatchBackupVaultInput object itself.
     */
    public PatchBackupVaultInput withMonitoringSettings(MonitoringSettings monitoringSettings) {
        this.monitoringSettings = monitoringSettings;
        return this;
    }

    /**
     * Get the securitySettings property: Security Settings.
     *
     * @return the securitySettings value.
     */
    public SecuritySettings securitySettings() {
        return this.securitySettings;
    }

    /**
     * Set the securitySettings property: Security Settings.
     *
     * @param securitySettings the securitySettings value to set.
     * @return the PatchBackupVaultInput object itself.
     */
    public PatchBackupVaultInput withSecuritySettings(SecuritySettings securitySettings) {
        this.securitySettings = securitySettings;
        return this;
    }

    /**
     * Get the featureSettings property: Feature Settings.
     *
     * @return the featureSettings value.
     */
    public FeatureSettings featureSettings() {
        return this.featureSettings;
    }

    /**
     * Set the featureSettings property: Feature Settings.
     *
     * @param featureSettings the featureSettings value to set.
     * @return the PatchBackupVaultInput object itself.
     */
    public PatchBackupVaultInput withFeatureSettings(FeatureSettings featureSettings) {
        this.featureSettings = featureSettings;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
        if (monitoringSettings() != null) {
            monitoringSettings().validate();
        }
        if (securitySettings() != null) {
            securitySettings().validate();
        }
        if (featureSettings() != null) {
            featureSettings().validate();
        }
    }
}
