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

package com.azure.resourcemanager.batchai.models;

import com.azure.core.util.Context;
import com.azure.resourcemanager.batchai.fluent.models.FileServerInner;
import java.time.OffsetDateTime;

/** An immutable client-side representation of FileServer. */
public interface FileServer {
    /**
     * Gets the id property: Fully qualified resource Id for the resource.
     *
     * @return the id value.
     */
    String id();

    /**
     * Gets the name property: The name of the resource.
     *
     * @return the name value.
     */
    String name();

    /**
     * Gets the type property: The type of the resource.
     *
     * @return the type value.
     */
    String type();

    /**
     * Gets the vmSize property: VM size of the File Server.
     *
     * @return the vmSize value.
     */
    String vmSize();

    /**
     * Gets the sshConfiguration property: SSH configuration for accessing the File Server node.
     *
     * @return the sshConfiguration value.
     */
    SshConfiguration sshConfiguration();

    /**
     * Gets the dataDisks property: Information about disks attached to File Server VM.
     *
     * @return the dataDisks value.
     */
    DataDisks dataDisks();

    /**
     * Gets the subnet property: File Server virtual network subnet resource ID.
     *
     * @return the subnet value.
     */
    ResourceId subnet();

    /**
     * Gets the mountSettings property: File Server mount settings.
     *
     * @return the mountSettings value.
     */
    MountSettings mountSettings();

    /**
     * Gets the provisioningStateTransitionTime property: Time when the provisioning state was changed.
     *
     * @return the provisioningStateTransitionTime value.
     */
    OffsetDateTime provisioningStateTransitionTime();

    /**
     * Gets the creationTime property: Time when the FileServer was created.
     *
     * @return the creationTime value.
     */
    OffsetDateTime creationTime();

    /**
     * Gets the provisioningState property: Provisioning state of the File Server. Possible values: creating - The File
     * Server is getting created; updating - The File Server creation has been accepted and it is getting updated;
     * deleting - The user has requested that the File Server be deleted, and it is in the process of being deleted;
     * failed - The File Server creation has failed with the specified error code. Details about the error code are
     * specified in the message field; succeeded - The File Server creation has succeeded.
     *
     * @return the provisioningState value.
     */
    FileServerProvisioningState provisioningState();

    /**
     * Gets the inner com.azure.resourcemanager.batchai.fluent.models.FileServerInner object.
     *
     * @return the inner object.
     */
    FileServerInner innerModel();

    /** The entirety of the FileServer definition. */
    interface Definition
        extends DefinitionStages.Blank, DefinitionStages.WithParentResource, DefinitionStages.WithCreate {
    }
    /** The FileServer definition stages. */
    interface DefinitionStages {
        /** The first stage of the FileServer definition. */
        interface Blank extends WithParentResource {
        }
        /** The stage of the FileServer definition allowing to specify parent resource. */
        interface WithParentResource {
            /**
             * Specifies resourceGroupName, workspaceName.
             *
             * @param resourceGroupName Name of the resource group to which the resource belongs.
             * @param workspaceName The name of the workspace. Workspace names can only contain a combination of
             *     alphanumeric characters along with dash (-) and underscore (_). The name must be from 1 through 64
             *     characters long.
             * @return the next definition stage.
             */
            WithCreate withExistingWorkspace(String resourceGroupName, String workspaceName);
        }
        /**
         * The stage of the FileServer definition which contains all the minimum required properties for the resource to
         * be created, but also allows for any other optional properties to be specified.
         */
        interface WithCreate
            extends DefinitionStages.WithVmSize,
                DefinitionStages.WithSshConfiguration,
                DefinitionStages.WithDataDisks,
                DefinitionStages.WithSubnet {
            /**
             * Executes the create request.
             *
             * @return the created resource.
             */
            FileServer create();

            /**
             * Executes the create request.
             *
             * @param context The context to associate with this operation.
             * @return the created resource.
             */
            FileServer create(Context context);
        }
        /** The stage of the FileServer definition allowing to specify vmSize. */
        interface WithVmSize {
            /**
             * Specifies the vmSize property: The size of the virtual machine for the File Server. For information about
             * available VM sizes from the Virtual Machines Marketplace, see Sizes for Virtual Machines (Linux)..
             *
             * @param vmSize The size of the virtual machine for the File Server. For information about available VM
             *     sizes from the Virtual Machines Marketplace, see Sizes for Virtual Machines (Linux).
             * @return the next definition stage.
             */
            WithCreate withVmSize(String vmSize);
        }
        /** The stage of the FileServer definition allowing to specify sshConfiguration. */
        interface WithSshConfiguration {
            /**
             * Specifies the sshConfiguration property: SSH configuration for the File Server node..
             *
             * @param sshConfiguration SSH configuration for the File Server node.
             * @return the next definition stage.
             */
            WithCreate withSshConfiguration(SshConfiguration sshConfiguration);
        }
        /** The stage of the FileServer definition allowing to specify dataDisks. */
        interface WithDataDisks {
            /**
             * Specifies the dataDisks property: Settings for the data disks which will be created for the File Server..
             *
             * @param dataDisks Settings for the data disks which will be created for the File Server.
             * @return the next definition stage.
             */
            WithCreate withDataDisks(DataDisks dataDisks);
        }
        /** The stage of the FileServer definition allowing to specify subnet. */
        interface WithSubnet {
            /**
             * Specifies the subnet property: Identifier of an existing virtual network subnet to put the File Server
             * in. If not provided, a new virtual network and subnet will be created..
             *
             * @param subnet Identifier of an existing virtual network subnet to put the File Server in. If not
             *     provided, a new virtual network and subnet will be created.
             * @return the next definition stage.
             */
            WithCreate withSubnet(ResourceId subnet);
        }
    }
    /**
     * Refreshes the resource to sync with Azure.
     *
     * @return the refreshed resource.
     */
    FileServer refresh();

    /**
     * Refreshes the resource to sync with Azure.
     *
     * @param context The context to associate with this operation.
     * @return the refreshed resource.
     */
    FileServer refresh(Context context);
}
