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

package com.azure.resourcemanager.connectedvmware.models;

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

/** Defines the resource properties. */
@Fluent
public final class HardwareProfile {
    /*
     * Gets or sets memory size in MBs for the vm.
     */
    @JsonProperty(value = "memorySizeMB")
    private Integer memorySizeMB;

    /*
     * Gets or sets the number of vCPUs for the vm.
     */
    @JsonProperty(value = "numCPUs")
    private Integer numCPUs;

    /*
     * Gets or sets the number of cores per socket for the vm. Defaults to 1 if unspecified.
     */
    @JsonProperty(value = "numCoresPerSocket")
    private Integer numCoresPerSocket;

    /*
     * Gets or sets a value indicating whether virtual processors can be added while this virtual machine is running.
     */
    @JsonProperty(value = "cpuHotAddEnabled", access = JsonProperty.Access.WRITE_ONLY)
    private Boolean cpuHotAddEnabled;

    /*
     * Gets or sets a value indicating whether virtual processors can be removed while this virtual machine is running.
     */
    @JsonProperty(value = "cpuHotRemoveEnabled", access = JsonProperty.Access.WRITE_ONLY)
    private Boolean cpuHotRemoveEnabled;

    /*
     * Gets or sets a value indicating whether memory can be added while this virtual machine is running.
     */
    @JsonProperty(value = "memoryHotAddEnabled", access = JsonProperty.Access.WRITE_ONLY)
    private Boolean memoryHotAddEnabled;

    /**
     * Get the memorySizeMB property: Gets or sets memory size in MBs for the vm.
     *
     * @return the memorySizeMB value.
     */
    public Integer memorySizeMB() {
        return this.memorySizeMB;
    }

    /**
     * Set the memorySizeMB property: Gets or sets memory size in MBs for the vm.
     *
     * @param memorySizeMB the memorySizeMB value to set.
     * @return the HardwareProfile object itself.
     */
    public HardwareProfile withMemorySizeMB(Integer memorySizeMB) {
        this.memorySizeMB = memorySizeMB;
        return this;
    }

    /**
     * Get the numCPUs property: Gets or sets the number of vCPUs for the vm.
     *
     * @return the numCPUs value.
     */
    public Integer numCPUs() {
        return this.numCPUs;
    }

    /**
     * Set the numCPUs property: Gets or sets the number of vCPUs for the vm.
     *
     * @param numCPUs the numCPUs value to set.
     * @return the HardwareProfile object itself.
     */
    public HardwareProfile withNumCPUs(Integer numCPUs) {
        this.numCPUs = numCPUs;
        return this;
    }

    /**
     * Get the numCoresPerSocket property: Gets or sets the number of cores per socket for the vm. Defaults to 1 if
     * unspecified.
     *
     * @return the numCoresPerSocket value.
     */
    public Integer numCoresPerSocket() {
        return this.numCoresPerSocket;
    }

    /**
     * Set the numCoresPerSocket property: Gets or sets the number of cores per socket for the vm. Defaults to 1 if
     * unspecified.
     *
     * @param numCoresPerSocket the numCoresPerSocket value to set.
     * @return the HardwareProfile object itself.
     */
    public HardwareProfile withNumCoresPerSocket(Integer numCoresPerSocket) {
        this.numCoresPerSocket = numCoresPerSocket;
        return this;
    }

    /**
     * Get the cpuHotAddEnabled property: Gets or sets a value indicating whether virtual processors can be added while
     * this virtual machine is running.
     *
     * @return the cpuHotAddEnabled value.
     */
    public Boolean cpuHotAddEnabled() {
        return this.cpuHotAddEnabled;
    }

    /**
     * Get the cpuHotRemoveEnabled property: Gets or sets a value indicating whether virtual processors can be removed
     * while this virtual machine is running.
     *
     * @return the cpuHotRemoveEnabled value.
     */
    public Boolean cpuHotRemoveEnabled() {
        return this.cpuHotRemoveEnabled;
    }

    /**
     * Get the memoryHotAddEnabled property: Gets or sets a value indicating whether memory can be added while this
     * virtual machine is running.
     *
     * @return the memoryHotAddEnabled value.
     */
    public Boolean memoryHotAddEnabled() {
        return this.memoryHotAddEnabled;
    }

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