// 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.Immutable;
import com.azure.resourcemanager.networkcloud.fluent.models.MachineSkuProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** MachineSkuSlot represents a single SKU and rack slot associated with the machine. */
@Immutable
public final class MachineSkuSlot {
    /*
     * MachineSkuProperties represents the properties of the machine SKU.
     *
     * The list of the resource properties.
     */
    @JsonProperty(value = "properties")
    private MachineSkuProperties innerProperties;

    /*
     * The position in the rack for the machine.
     */
    @JsonProperty(value = "rackSlot", access = JsonProperty.Access.WRITE_ONLY)
    private Long rackSlot;

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

    /**
     * Get the innerProperties property: MachineSkuProperties represents the properties of the machine SKU.
     *
     * <p>The list of the resource properties.
     *
     * @return the innerProperties value.
     */
    private MachineSkuProperties innerProperties() {
        return this.innerProperties;
    }

    /**
     * Get the rackSlot property: The position in the rack for the machine.
     *
     * @return the rackSlot value.
     */
    public Long rackSlot() {
        return this.rackSlot;
    }

    /**
     * Get the bootstrapProtocol property: The type of bootstrap protocol used.
     *
     * @return the bootstrapProtocol value.
     */
    public BootstrapProtocol bootstrapProtocol() {
        return this.innerProperties() == null ? null : this.innerProperties().bootstrapProtocol();
    }

    /**
     * Get the cpuCores property: The count of CPU cores for this machine.
     *
     * @return the cpuCores value.
     */
    public Long cpuCores() {
        return this.innerProperties() == null ? null : this.innerProperties().cpuCores();
    }

    /**
     * Get the cpuSockets property: The count of CPU sockets for this machine.
     *
     * @return the cpuSockets value.
     */
    public Long cpuSockets() {
        return this.innerProperties() == null ? null : this.innerProperties().cpuSockets();
    }

    /**
     * Get the disks property: The list of disks.
     *
     * @return the disks value.
     */
    public List<MachineDisk> disks() {
        return this.innerProperties() == null ? null : this.innerProperties().disks();
    }

    /**
     * Get the generation property: The generation of the architecture.
     *
     * @return the generation value.
     */
    public String generation() {
        return this.innerProperties() == null ? null : this.innerProperties().generation();
    }

    /**
     * Get the hardwareVersion property: The hardware version of the machine.
     *
     * @return the hardwareVersion value.
     */
    public String hardwareVersion() {
        return this.innerProperties() == null ? null : this.innerProperties().hardwareVersion();
    }

    /**
     * Get the memoryCapacityGB property: The maximum amount of memory in GB.
     *
     * @return the memoryCapacityGB value.
     */
    public Long memoryCapacityGB() {
        return this.innerProperties() == null ? null : this.innerProperties().memoryCapacityGB();
    }

    /**
     * Get the model property: The model of the machine.
     *
     * @return the model value.
     */
    public String model() {
        return this.innerProperties() == null ? null : this.innerProperties().model();
    }

    /**
     * Get the networkInterfaces property: The list of network interfaces.
     *
     * @return the networkInterfaces value.
     */
    public List<NetworkInterface> networkInterfaces() {
        return this.innerProperties() == null ? null : this.innerProperties().networkInterfaces();
    }

    /**
     * Get the totalThreads property: The count of SMT and physical core threads for this machine.
     *
     * @return the totalThreads value.
     */
    public Long totalThreads() {
        return this.innerProperties() == null ? null : this.innerProperties().totalThreads();
    }

    /**
     * Get the vendor property: The make of the machine.
     *
     * @return the vendor value.
     */
    public String vendor() {
        return this.innerProperties() == null ? null : this.innerProperties().vendor();
    }

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