/*
 * ProxMox VE API
 *
 * ProxMox VE API
 *
 * The version of the OpenAPI document: 2.0
 * Contact: support@lumaserv.com
 * Generated by: https://github.com/openapitools/openapi-generator.git
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.IO;
using System.Runtime.Serialization;
using System.Text;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System.ComponentModel.DataAnnotations;
using OpenAPIDateConverter = ProxmoxSharp.Client.OpenAPIDateConverter;

namespace ProxmoxSharp.Model
{
    /// <summary>
    /// GetCurrentVMStatus200ResponseData
    /// </summary>
    [DataContract(Name = "getCurrentVMStatus_200_response_data")]
    public partial class GetCurrentVMStatus200ResponseData : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetCurrentVMStatus200ResponseData" /> class.
        /// </summary>
        /// <param name="agent">QEMU Guest Agent is enabled in config..</param>
        /// <param name="clipboard">Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added..</param>
        /// <param name="cpu">Current CPU usage..</param>
        /// <param name="cpus">Maximum usable CPUs..</param>
        /// <param name="diskread">The amount of bytes the guest read from it&#39;s block devices since the guest was started. (Note: This info is not available for all storage types.).</param>
        /// <param name="diskwrite">The amount of bytes the guest wrote from it&#39;s block devices since the guest was started. (Note: This info is not available for all storage types.).</param>
        /// <param name="ha">HA manager service status..</param>
        /// <param name="varLock">The current config lock, if any..</param>
        /// <param name="maxdisk">Root disk size in bytes..</param>
        /// <param name="maxmem">Maximum memory in bytes..</param>
        /// <param name="mem">Currently used memory in bytes..</param>
        /// <param name="memhost">Current memory usage on the host..</param>
        /// <param name="name">VM (host)name..</param>
        /// <param name="netin">The amount of traffic in bytes that was sent to the guest over the network since it was started..</param>
        /// <param name="netout">The amount of traffic in bytes that was sent from the guest over the network since it was started..</param>
        /// <param name="pid">PID of the QEMU process, if the VM is running..</param>
        /// <param name="pressurecpufull">CPU Full pressure stall average over the last 10 seconds..</param>
        /// <param name="pressurecpusome">CPU Some pressure stall average over the last 10 seconds..</param>
        /// <param name="pressureiofull">IO Full pressure stall average over the last 10 seconds..</param>
        /// <param name="pressureiosome">IO Some pressure stall average over the last 10 seconds..</param>
        /// <param name="pressurememoryfull">Memory Full pressure stall average over the last 10 seconds..</param>
        /// <param name="pressurememorysome">Memory Some pressure stall average over the last 10 seconds..</param>
        /// <param name="qmpstatus">VM run state from the &#39;query-status&#39; QMP monitor command..</param>
        /// <param name="runningMachine">The currently running machine type (if running)..</param>
        /// <param name="runningQemu">The QEMU version the VM is currently using (if running)..</param>
        /// <param name="serial">Guest has serial device configured..</param>
        /// <param name="spice">QEMU VGA configuration supports spice..</param>
        /// <param name="status">QEMU process status..</param>
        /// <param name="tags">The current configured tags, if any.</param>
        /// <param name="template">Determines if the guest is a template..</param>
        /// <param name="uptime">Uptime in seconds..</param>
        /// <param name="vmid">The (unique) ID of the VM..</param>
        public GetCurrentVMStatus200ResponseData(Int64 agent = default(Int64), string clipboard = default(string), decimal cpu = default(decimal), decimal cpus = default(decimal), Int64 diskread = default(Int64), Int64 diskwrite = default(Int64), Object ha = default(Object), string varLock = default(string), Int64 maxdisk = default(Int64), Int64 maxmem = default(Int64), Int64 mem = default(Int64), Int64 memhost = default(Int64), string name = default(string), Int64 netin = default(Int64), Int64 netout = default(Int64), Int64 pid = default(Int64), decimal pressurecpufull = default(decimal), decimal pressurecpusome = default(decimal), decimal pressureiofull = default(decimal), decimal pressureiosome = default(decimal), decimal pressurememoryfull = default(decimal), decimal pressurememorysome = default(decimal), string qmpstatus = default(string), string runningMachine = default(string), string runningQemu = default(string), Int64 serial = default(Int64), Int64 spice = default(Int64), string status = default(string), string tags = default(string), Int64 template = default(Int64), Int64 uptime = default(Int64), Int64 vmid = default(Int64))
        {
            this.Agent = agent;
            this.Clipboard = clipboard;
            this.Cpu = cpu;
            this.Cpus = cpus;
            this.Diskread = diskread;
            this.Diskwrite = diskwrite;
            this.Ha = ha;
            this.Lock = varLock;
            this.Maxdisk = maxdisk;
            this.Maxmem = maxmem;
            this.Mem = mem;
            this.Memhost = memhost;
            this.Name = name;
            this.Netin = netin;
            this.Netout = netout;
            this.Pid = pid;
            this.Pressurecpufull = pressurecpufull;
            this.Pressurecpusome = pressurecpusome;
            this.Pressureiofull = pressureiofull;
            this.Pressureiosome = pressureiosome;
            this.Pressurememoryfull = pressurememoryfull;
            this.Pressurememorysome = pressurememorysome;
            this.Qmpstatus = qmpstatus;
            this.RunningMachine = runningMachine;
            this.RunningQemu = runningQemu;
            this.Serial = serial;
            this.Spice = spice;
            this.Status = status;
            this.Tags = tags;
            this.Template = template;
            this.Uptime = uptime;
            this.Vmid = vmid;
        }

        /// <summary>
        /// QEMU Guest Agent is enabled in config.
        /// </summary>
        /// <value>QEMU Guest Agent is enabled in config.</value>
        [DataMember(Name = "agent", EmitDefaultValue = false)]
        public Int64 Agent { get; set; }

        /// <summary>
        /// Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added.
        /// </summary>
        /// <value>Enable a specific clipboard. If not set, depending on the display type the SPICE one will be added.</value>
        [DataMember(Name = "clipboard", EmitDefaultValue = false)]
        public string Clipboard { get; set; }

        /// <summary>
        /// Current CPU usage.
        /// </summary>
        /// <value>Current CPU usage.</value>
        [DataMember(Name = "cpu", EmitDefaultValue = false)]
        public decimal Cpu { get; set; }

        /// <summary>
        /// Maximum usable CPUs.
        /// </summary>
        /// <value>Maximum usable CPUs.</value>
        [DataMember(Name = "cpus", EmitDefaultValue = false)]
        public decimal Cpus { get; set; }

        /// <summary>
        /// The amount of bytes the guest read from it&#39;s block devices since the guest was started. (Note: This info is not available for all storage types.)
        /// </summary>
        /// <value>The amount of bytes the guest read from it&#39;s block devices since the guest was started. (Note: This info is not available for all storage types.)</value>
        [DataMember(Name = "diskread", EmitDefaultValue = false)]
        public Int64 Diskread { get; set; }

        /// <summary>
        /// The amount of bytes the guest wrote from it&#39;s block devices since the guest was started. (Note: This info is not available for all storage types.)
        /// </summary>
        /// <value>The amount of bytes the guest wrote from it&#39;s block devices since the guest was started. (Note: This info is not available for all storage types.)</value>
        [DataMember(Name = "diskwrite", EmitDefaultValue = false)]
        public Int64 Diskwrite { get; set; }

        /// <summary>
        /// HA manager service status.
        /// </summary>
        /// <value>HA manager service status.</value>
        [DataMember(Name = "ha", EmitDefaultValue = false)]
        public Object Ha { get; set; }

        /// <summary>
        /// The current config lock, if any.
        /// </summary>
        /// <value>The current config lock, if any.</value>
        [DataMember(Name = "lock", EmitDefaultValue = false)]
        public string Lock { get; set; }

        /// <summary>
        /// Root disk size in bytes.
        /// </summary>
        /// <value>Root disk size in bytes.</value>
        [DataMember(Name = "maxdisk", EmitDefaultValue = false)]
        public Int64 Maxdisk { get; set; }

        /// <summary>
        /// Maximum memory in bytes.
        /// </summary>
        /// <value>Maximum memory in bytes.</value>
        [DataMember(Name = "maxmem", EmitDefaultValue = false)]
        public Int64 Maxmem { get; set; }

        /// <summary>
        /// Currently used memory in bytes.
        /// </summary>
        /// <value>Currently used memory in bytes.</value>
        [DataMember(Name = "mem", EmitDefaultValue = false)]
        public Int64 Mem { get; set; }

        /// <summary>
        /// Current memory usage on the host.
        /// </summary>
        /// <value>Current memory usage on the host.</value>
        [DataMember(Name = "memhost", EmitDefaultValue = false)]
        public Int64 Memhost { get; set; }

        /// <summary>
        /// VM (host)name.
        /// </summary>
        /// <value>VM (host)name.</value>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// The amount of traffic in bytes that was sent to the guest over the network since it was started.
        /// </summary>
        /// <value>The amount of traffic in bytes that was sent to the guest over the network since it was started.</value>
        [DataMember(Name = "netin", EmitDefaultValue = false)]
        public Int64 Netin { get; set; }

        /// <summary>
        /// The amount of traffic in bytes that was sent from the guest over the network since it was started.
        /// </summary>
        /// <value>The amount of traffic in bytes that was sent from the guest over the network since it was started.</value>
        [DataMember(Name = "netout", EmitDefaultValue = false)]
        public Int64 Netout { get; set; }

        /// <summary>
        /// PID of the QEMU process, if the VM is running.
        /// </summary>
        /// <value>PID of the QEMU process, if the VM is running.</value>
        [DataMember(Name = "pid", EmitDefaultValue = false)]
        public Int64 Pid { get; set; }

        /// <summary>
        /// CPU Full pressure stall average over the last 10 seconds.
        /// </summary>
        /// <value>CPU Full pressure stall average over the last 10 seconds.</value>
        [DataMember(Name = "pressurecpufull", EmitDefaultValue = false)]
        public decimal Pressurecpufull { get; set; }

        /// <summary>
        /// CPU Some pressure stall average over the last 10 seconds.
        /// </summary>
        /// <value>CPU Some pressure stall average over the last 10 seconds.</value>
        [DataMember(Name = "pressurecpusome", EmitDefaultValue = false)]
        public decimal Pressurecpusome { get; set; }

        /// <summary>
        /// IO Full pressure stall average over the last 10 seconds.
        /// </summary>
        /// <value>IO Full pressure stall average over the last 10 seconds.</value>
        [DataMember(Name = "pressureiofull", EmitDefaultValue = false)]
        public decimal Pressureiofull { get; set; }

        /// <summary>
        /// IO Some pressure stall average over the last 10 seconds.
        /// </summary>
        /// <value>IO Some pressure stall average over the last 10 seconds.</value>
        [DataMember(Name = "pressureiosome", EmitDefaultValue = false)]
        public decimal Pressureiosome { get; set; }

        /// <summary>
        /// Memory Full pressure stall average over the last 10 seconds.
        /// </summary>
        /// <value>Memory Full pressure stall average over the last 10 seconds.</value>
        [DataMember(Name = "pressurememoryfull", EmitDefaultValue = false)]
        public decimal Pressurememoryfull { get; set; }

        /// <summary>
        /// Memory Some pressure stall average over the last 10 seconds.
        /// </summary>
        /// <value>Memory Some pressure stall average over the last 10 seconds.</value>
        [DataMember(Name = "pressurememorysome", EmitDefaultValue = false)]
        public decimal Pressurememorysome { get; set; }

        /// <summary>
        /// VM run state from the &#39;query-status&#39; QMP monitor command.
        /// </summary>
        /// <value>VM run state from the &#39;query-status&#39; QMP monitor command.</value>
        [DataMember(Name = "qmpstatus", EmitDefaultValue = false)]
        public string Qmpstatus { get; set; }

        /// <summary>
        /// The currently running machine type (if running).
        /// </summary>
        /// <value>The currently running machine type (if running).</value>
        [DataMember(Name = "running-machine", EmitDefaultValue = false)]
        public string RunningMachine { get; set; }

        /// <summary>
        /// The QEMU version the VM is currently using (if running).
        /// </summary>
        /// <value>The QEMU version the VM is currently using (if running).</value>
        [DataMember(Name = "running-qemu", EmitDefaultValue = false)]
        public string RunningQemu { get; set; }

        /// <summary>
        /// Guest has serial device configured.
        /// </summary>
        /// <value>Guest has serial device configured.</value>
        [DataMember(Name = "serial", EmitDefaultValue = false)]
        public Int64 Serial { get; set; }

        /// <summary>
        /// QEMU VGA configuration supports spice.
        /// </summary>
        /// <value>QEMU VGA configuration supports spice.</value>
        [DataMember(Name = "spice", EmitDefaultValue = false)]
        public Int64 Spice { get; set; }

        /// <summary>
        /// QEMU process status.
        /// </summary>
        /// <value>QEMU process status.</value>
        [DataMember(Name = "status", EmitDefaultValue = false)]
        public string Status { get; set; }

        /// <summary>
        /// The current configured tags, if any
        /// </summary>
        /// <value>The current configured tags, if any</value>
        [DataMember(Name = "tags", EmitDefaultValue = false)]
        public string Tags { get; set; }

        /// <summary>
        /// Determines if the guest is a template.
        /// </summary>
        /// <value>Determines if the guest is a template.</value>
        [DataMember(Name = "template", EmitDefaultValue = false)]
        public Int64 Template { get; set; }

        /// <summary>
        /// Uptime in seconds.
        /// </summary>
        /// <value>Uptime in seconds.</value>
        [DataMember(Name = "uptime", EmitDefaultValue = false)]
        public Int64 Uptime { get; set; }

        /// <summary>
        /// The (unique) ID of the VM.
        /// </summary>
        /// <value>The (unique) ID of the VM.</value>
        [DataMember(Name = "vmid", EmitDefaultValue = false)]
        public Int64 Vmid { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("class GetCurrentVMStatus200ResponseData {\n");
            sb.Append("  Agent: ").Append(Agent).Append("\n");
            sb.Append("  Clipboard: ").Append(Clipboard).Append("\n");
            sb.Append("  Cpu: ").Append(Cpu).Append("\n");
            sb.Append("  Cpus: ").Append(Cpus).Append("\n");
            sb.Append("  Diskread: ").Append(Diskread).Append("\n");
            sb.Append("  Diskwrite: ").Append(Diskwrite).Append("\n");
            sb.Append("  Ha: ").Append(Ha).Append("\n");
            sb.Append("  Lock: ").Append(Lock).Append("\n");
            sb.Append("  Maxdisk: ").Append(Maxdisk).Append("\n");
            sb.Append("  Maxmem: ").Append(Maxmem).Append("\n");
            sb.Append("  Mem: ").Append(Mem).Append("\n");
            sb.Append("  Memhost: ").Append(Memhost).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Netin: ").Append(Netin).Append("\n");
            sb.Append("  Netout: ").Append(Netout).Append("\n");
            sb.Append("  Pid: ").Append(Pid).Append("\n");
            sb.Append("  Pressurecpufull: ").Append(Pressurecpufull).Append("\n");
            sb.Append("  Pressurecpusome: ").Append(Pressurecpusome).Append("\n");
            sb.Append("  Pressureiofull: ").Append(Pressureiofull).Append("\n");
            sb.Append("  Pressureiosome: ").Append(Pressureiosome).Append("\n");
            sb.Append("  Pressurememoryfull: ").Append(Pressurememoryfull).Append("\n");
            sb.Append("  Pressurememorysome: ").Append(Pressurememorysome).Append("\n");
            sb.Append("  Qmpstatus: ").Append(Qmpstatus).Append("\n");
            sb.Append("  RunningMachine: ").Append(RunningMachine).Append("\n");
            sb.Append("  RunningQemu: ").Append(RunningQemu).Append("\n");
            sb.Append("  Serial: ").Append(Serial).Append("\n");
            sb.Append("  Spice: ").Append(Spice).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  Template: ").Append(Template).Append("\n");
            sb.Append("  Uptime: ").Append(Uptime).Append("\n");
            sb.Append("  Vmid: ").Append(Vmid).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
