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

package com.azure.resourcemanager.machinelearning.models;

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

/** Defines an Aml Instance DataDisk. */
@Fluent
public final class ComputeInstanceDataDisk {
    /*
     * Caching type of Data Disk.
     */
    @JsonProperty(value = "caching")
    private Caching caching;

    /*
     * The initial disk size in gigabytes.
     */
    @JsonProperty(value = "diskSizeGB")
    private Integer diskSizeGB;

    /*
     * The logical unit number.
     *
     * The lun is used to uniquely identify each data disk. If attaching multiple disks, each should have a distinct
     * lun.
     */
    @JsonProperty(value = "lun")
    private Integer lun;

    /*
     * type of this storage account.
     */
    @JsonProperty(value = "storageAccountType")
    private StorageAccountType storageAccountType;

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

    /**
     * Get the caching property: Caching type of Data Disk.
     *
     * @return the caching value.
     */
    public Caching caching() {
        return this.caching;
    }

    /**
     * Set the caching property: Caching type of Data Disk.
     *
     * @param caching the caching value to set.
     * @return the ComputeInstanceDataDisk object itself.
     */
    public ComputeInstanceDataDisk withCaching(Caching caching) {
        this.caching = caching;
        return this;
    }

    /**
     * Get the diskSizeGB property: The initial disk size in gigabytes.
     *
     * @return the diskSizeGB value.
     */
    public Integer diskSizeGB() {
        return this.diskSizeGB;
    }

    /**
     * Set the diskSizeGB property: The initial disk size in gigabytes.
     *
     * @param diskSizeGB the diskSizeGB value to set.
     * @return the ComputeInstanceDataDisk object itself.
     */
    public ComputeInstanceDataDisk withDiskSizeGB(Integer diskSizeGB) {
        this.diskSizeGB = diskSizeGB;
        return this;
    }

    /**
     * Get the lun property: The logical unit number.
     *
     * <p>The lun is used to uniquely identify each data disk. If attaching multiple disks, each should have a distinct
     * lun.
     *
     * @return the lun value.
     */
    public Integer lun() {
        return this.lun;
    }

    /**
     * Set the lun property: The logical unit number.
     *
     * <p>The lun is used to uniquely identify each data disk. If attaching multiple disks, each should have a distinct
     * lun.
     *
     * @param lun the lun value to set.
     * @return the ComputeInstanceDataDisk object itself.
     */
    public ComputeInstanceDataDisk withLun(Integer lun) {
        this.lun = lun;
        return this;
    }

    /**
     * Get the storageAccountType property: type of this storage account.
     *
     * @return the storageAccountType value.
     */
    public StorageAccountType storageAccountType() {
        return this.storageAccountType;
    }

    /**
     * Set the storageAccountType property: type of this storage account.
     *
     * @param storageAccountType the storageAccountType value to set.
     * @return the ComputeInstanceDataDisk object itself.
     */
    public ComputeInstanceDataDisk withStorageAccountType(StorageAccountType storageAccountType) {
        this.storageAccountType = storageAccountType;
        return this;
    }

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