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

package com.azure.resourcemanager.networkcloud.models;

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

/** ClusterCapacity represents various details regarding compute capacity. */
@Fluent
public final class ClusterCapacity {
    /*
     * The remaining appliance-based storage in GB available for workload use.
     */
    @JsonProperty(value = "availableApplianceStorageGB")
    private Long availableApplianceStorageGB;

    /*
     * The remaining number of cores that are available in this cluster for workload use.
     */
    @JsonProperty(value = "availableCoreCount")
    private Long availableCoreCount;

    /*
     * The remaining machine or host-based storage in GB available for workload use.
     */
    @JsonProperty(value = "availableHostStorageGB")
    private Long availableHostStorageGB;

    /*
     * The remaining memory in GB that are available in this cluster for workload use.
     */
    @JsonProperty(value = "availableMemoryGB")
    private Long availableMemoryGB;

    /*
     * The total appliance-based storage in GB supported by this cluster for workload use.
     */
    @JsonProperty(value = "totalApplianceStorageGB")
    private Long totalApplianceStorageGB;

    /*
     * The total number of cores that are supported by this cluster for workload use.
     */
    @JsonProperty(value = "totalCoreCount")
    private Long totalCoreCount;

    /*
     * The total machine or host-based storage in GB supported by this cluster for workload use.
     */
    @JsonProperty(value = "totalHostStorageGB")
    private Long totalHostStorageGB;

    /*
     * The total memory supported by this cluster for workload use.
     */
    @JsonProperty(value = "totalMemoryGB")
    private Long totalMemoryGB;

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

    /**
     * Get the availableApplianceStorageGB property: The remaining appliance-based storage in GB available for workload
     * use.
     *
     * @return the availableApplianceStorageGB value.
     */
    public Long availableApplianceStorageGB() {
        return this.availableApplianceStorageGB;
    }

    /**
     * Set the availableApplianceStorageGB property: The remaining appliance-based storage in GB available for workload
     * use.
     *
     * @param availableApplianceStorageGB the availableApplianceStorageGB value to set.
     * @return the ClusterCapacity object itself.
     */
    public ClusterCapacity withAvailableApplianceStorageGB(Long availableApplianceStorageGB) {
        this.availableApplianceStorageGB = availableApplianceStorageGB;
        return this;
    }

    /**
     * Get the availableCoreCount property: The remaining number of cores that are available in this cluster for
     * workload use.
     *
     * @return the availableCoreCount value.
     */
    public Long availableCoreCount() {
        return this.availableCoreCount;
    }

    /**
     * Set the availableCoreCount property: The remaining number of cores that are available in this cluster for
     * workload use.
     *
     * @param availableCoreCount the availableCoreCount value to set.
     * @return the ClusterCapacity object itself.
     */
    public ClusterCapacity withAvailableCoreCount(Long availableCoreCount) {
        this.availableCoreCount = availableCoreCount;
        return this;
    }

    /**
     * Get the availableHostStorageGB property: The remaining machine or host-based storage in GB available for workload
     * use.
     *
     * @return the availableHostStorageGB value.
     */
    public Long availableHostStorageGB() {
        return this.availableHostStorageGB;
    }

    /**
     * Set the availableHostStorageGB property: The remaining machine or host-based storage in GB available for workload
     * use.
     *
     * @param availableHostStorageGB the availableHostStorageGB value to set.
     * @return the ClusterCapacity object itself.
     */
    public ClusterCapacity withAvailableHostStorageGB(Long availableHostStorageGB) {
        this.availableHostStorageGB = availableHostStorageGB;
        return this;
    }

    /**
     * Get the availableMemoryGB property: The remaining memory in GB that are available in this cluster for workload
     * use.
     *
     * @return the availableMemoryGB value.
     */
    public Long availableMemoryGB() {
        return this.availableMemoryGB;
    }

    /**
     * Set the availableMemoryGB property: The remaining memory in GB that are available in this cluster for workload
     * use.
     *
     * @param availableMemoryGB the availableMemoryGB value to set.
     * @return the ClusterCapacity object itself.
     */
    public ClusterCapacity withAvailableMemoryGB(Long availableMemoryGB) {
        this.availableMemoryGB = availableMemoryGB;
        return this;
    }

    /**
     * Get the totalApplianceStorageGB property: The total appliance-based storage in GB supported by this cluster for
     * workload use.
     *
     * @return the totalApplianceStorageGB value.
     */
    public Long totalApplianceStorageGB() {
        return this.totalApplianceStorageGB;
    }

    /**
     * Set the totalApplianceStorageGB property: The total appliance-based storage in GB supported by this cluster for
     * workload use.
     *
     * @param totalApplianceStorageGB the totalApplianceStorageGB value to set.
     * @return the ClusterCapacity object itself.
     */
    public ClusterCapacity withTotalApplianceStorageGB(Long totalApplianceStorageGB) {
        this.totalApplianceStorageGB = totalApplianceStorageGB;
        return this;
    }

    /**
     * Get the totalCoreCount property: The total number of cores that are supported by this cluster for workload use.
     *
     * @return the totalCoreCount value.
     */
    public Long totalCoreCount() {
        return this.totalCoreCount;
    }

    /**
     * Set the totalCoreCount property: The total number of cores that are supported by this cluster for workload use.
     *
     * @param totalCoreCount the totalCoreCount value to set.
     * @return the ClusterCapacity object itself.
     */
    public ClusterCapacity withTotalCoreCount(Long totalCoreCount) {
        this.totalCoreCount = totalCoreCount;
        return this;
    }

    /**
     * Get the totalHostStorageGB property: The total machine or host-based storage in GB supported by this cluster for
     * workload use.
     *
     * @return the totalHostStorageGB value.
     */
    public Long totalHostStorageGB() {
        return this.totalHostStorageGB;
    }

    /**
     * Set the totalHostStorageGB property: The total machine or host-based storage in GB supported by this cluster for
     * workload use.
     *
     * @param totalHostStorageGB the totalHostStorageGB value to set.
     * @return the ClusterCapacity object itself.
     */
    public ClusterCapacity withTotalHostStorageGB(Long totalHostStorageGB) {
        this.totalHostStorageGB = totalHostStorageGB;
        return this;
    }

    /**
     * Get the totalMemoryGB property: The total memory supported by this cluster for workload use.
     *
     * @return the totalMemoryGB value.
     */
    public Long totalMemoryGB() {
        return this.totalMemoryGB;
    }

    /**
     * Set the totalMemoryGB property: The total memory supported by this cluster for workload use.
     *
     * @param totalMemoryGB the totalMemoryGB value to set.
     * @return the ClusterCapacity object itself.
     */
    public ClusterCapacity withTotalMemoryGB(Long totalMemoryGB) {
        this.totalMemoryGB = totalMemoryGB;
        return this;
    }

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