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

package com.azure.resourcemanager.hdinsight.models;

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

/** The storage Account. */
@Fluent
public final class StorageAccount {
    /*
     * The name of the storage account.
     */
    @JsonProperty(value = "name")
    private String name;

    /*
     * Whether or not the storage account is the default storage account.
     */
    @JsonProperty(value = "isDefault")
    private Boolean isDefault;

    /*
     * The container in the storage account, only to be specified for WASB storage accounts.
     */
    @JsonProperty(value = "container")
    private String container;

    /*
     * The filesystem, only to be specified for Azure Data Lake Storage Gen 2.
     */
    @JsonProperty(value = "fileSystem")
    private String fileSystem;

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

    /*
     * The resource ID of storage account, only to be specified for Azure Data Lake Storage Gen 2.
     */
    @JsonProperty(value = "resourceId")
    private String resourceId;

    /*
     * The managed identity (MSI) that is allowed to access the storage account, only to be specified for Azure Data
     * Lake Storage Gen 2.
     */
    @JsonProperty(value = "msiResourceId")
    private String msiResourceId;

    /*
     * The shared access signature key.
     */
    @JsonProperty(value = "saskey")
    private String saskey;

    /*
     * The file share name.
     */
    @JsonProperty(value = "fileshare")
    private String fileshare;

    /*
     * Enable secure channel or not, it's an optional field. Default value is false when cluster version < 5.1 and true
     * when cluster version >= 5.1 ,
     */
    @JsonProperty(value = "enableSecureChannel")
    private Boolean enableSecureChannel;

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

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

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

    /**
     * Get the isDefault property: Whether or not the storage account is the default storage account.
     *
     * @return the isDefault value.
     */
    public Boolean isDefault() {
        return this.isDefault;
    }

    /**
     * Set the isDefault property: Whether or not the storage account is the default storage account.
     *
     * @param isDefault the isDefault value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withIsDefault(Boolean isDefault) {
        this.isDefault = isDefault;
        return this;
    }

    /**
     * Get the container property: The container in the storage account, only to be specified for WASB storage accounts.
     *
     * @return the container value.
     */
    public String container() {
        return this.container;
    }

    /**
     * Set the container property: The container in the storage account, only to be specified for WASB storage accounts.
     *
     * @param container the container value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withContainer(String container) {
        this.container = container;
        return this;
    }

    /**
     * Get the fileSystem property: The filesystem, only to be specified for Azure Data Lake Storage Gen 2.
     *
     * @return the fileSystem value.
     */
    public String fileSystem() {
        return this.fileSystem;
    }

    /**
     * Set the fileSystem property: The filesystem, only to be specified for Azure Data Lake Storage Gen 2.
     *
     * @param fileSystem the fileSystem value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withFileSystem(String fileSystem) {
        this.fileSystem = fileSystem;
        return this;
    }

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

    /**
     * Set the key property: The storage account access key.
     *
     * @param key the key value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withKey(String key) {
        this.key = key;
        return this;
    }

    /**
     * Get the resourceId property: The resource ID of storage account, only to be specified for Azure Data Lake Storage
     * Gen 2.
     *
     * @return the resourceId value.
     */
    public String resourceId() {
        return this.resourceId;
    }

    /**
     * Set the resourceId property: The resource ID of storage account, only to be specified for Azure Data Lake Storage
     * Gen 2.
     *
     * @param resourceId the resourceId value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withResourceId(String resourceId) {
        this.resourceId = resourceId;
        return this;
    }

    /**
     * Get the msiResourceId property: The managed identity (MSI) that is allowed to access the storage account, only to
     * be specified for Azure Data Lake Storage Gen 2.
     *
     * @return the msiResourceId value.
     */
    public String msiResourceId() {
        return this.msiResourceId;
    }

    /**
     * Set the msiResourceId property: The managed identity (MSI) that is allowed to access the storage account, only to
     * be specified for Azure Data Lake Storage Gen 2.
     *
     * @param msiResourceId the msiResourceId value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withMsiResourceId(String msiResourceId) {
        this.msiResourceId = msiResourceId;
        return this;
    }

    /**
     * Get the saskey property: The shared access signature key.
     *
     * @return the saskey value.
     */
    public String saskey() {
        return this.saskey;
    }

    /**
     * Set the saskey property: The shared access signature key.
     *
     * @param saskey the saskey value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withSaskey(String saskey) {
        this.saskey = saskey;
        return this;
    }

    /**
     * Get the fileshare property: The file share name.
     *
     * @return the fileshare value.
     */
    public String fileshare() {
        return this.fileshare;
    }

    /**
     * Set the fileshare property: The file share name.
     *
     * @param fileshare the fileshare value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withFileshare(String fileshare) {
        this.fileshare = fileshare;
        return this;
    }

    /**
     * Get the enableSecureChannel property: Enable secure channel or not, it's an optional field. Default value is
     * false when cluster version &lt; 5.1 and true when cluster version &gt;= 5.1 ,.
     *
     * @return the enableSecureChannel value.
     */
    public Boolean enableSecureChannel() {
        return this.enableSecureChannel;
    }

    /**
     * Set the enableSecureChannel property: Enable secure channel or not, it's an optional field. Default value is
     * false when cluster version &lt; 5.1 and true when cluster version &gt;= 5.1 ,.
     *
     * @param enableSecureChannel the enableSecureChannel value to set.
     * @return the StorageAccount object itself.
     */
    public StorageAccount withEnableSecureChannel(Boolean enableSecureChannel) {
        this.enableSecureChannel = enableSecureChannel;
        return this;
    }

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