/*
 * 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>
    /// GetClusterResources200ResponseDataInner
    /// </summary>
    [DataContract(Name = "getClusterResources_200_response_data_inner")]
    public partial class GetClusterResources200ResponseDataInner : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetClusterResources200ResponseDataInner" /> class.
        /// </summary>
        /// <param name="cgroupMode">The cgroup mode the node operates under (for type &#39;node&#39;)..</param>
        /// <param name="content">Allowed storage content types (for type &#39;storage&#39;)..</param>
        /// <param name="cpu">CPU utilization (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="disk">Used disk space in bytes (for type &#39;storage&#39;), used root image space for VMs (for types &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="diskread">The number of bytes the guest read from its block devices since the guest was started. This info is not available for all storage types. (for types &#39;qemu&#39; and &#39;lxc&#39;).</param>
        /// <param name="diskwrite">The number of bytes the guest wrote to its block devices since the guest was started. This info is not available for all storage types. (for types &#39;qemu&#39; and &#39;lxc&#39;).</param>
        /// <param name="hastate">HA service status (for HA managed VMs)..</param>
        /// <param name="id">Resource id..</param>
        /// <param name="level">Support level (for type &#39;node&#39;)..</param>
        /// <param name="varLock">The guest&#39;s current config lock (for types &#39;qemu&#39; and &#39;lxc&#39;).</param>
        /// <param name="maxcpu">Number of available CPUs (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="maxdisk">Storage size in bytes (for type &#39;storage&#39;), root image size for VMs (for types &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="maxmem">Number of available memory in bytes (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="mem">Used memory in bytes (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="memhost">Used memory in bytes from the point of view of the host (for types &#39;qemu&#39;)..</param>
        /// <param name="name">Name of the resource..</param>
        /// <param name="netin">The amount of traffic in bytes that was sent to the guest over the network since it was started. (for types &#39;qemu&#39; and &#39;lxc&#39;).</param>
        /// <param name="netout">The amount of traffic in bytes that was sent from the guest over the network since it was started. (for types &#39;qemu&#39; and &#39;lxc&#39;).</param>
        /// <param name="network">The name of a Network entity (for type &#39;network&#39;)..</param>
        /// <param name="networkType">The type of network resource (for type &#39;network&#39;)..</param>
        /// <param name="node">The cluster node name (for types &#39;node&#39;, &#39;storage&#39;, &#39;qemu&#39;, and &#39;lxc&#39;)..</param>
        /// <param name="plugintype">More specific type, if available..</param>
        /// <param name="pool">The pool name (for types &#39;pool&#39;, &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="protocol">The protocol of a fabric (for type &#39;network&#39;, network-type &#39;fabric&#39;)..</param>
        /// <param name="sdn">The name of an SDN entity (for type &#39;sdn&#39;).</param>
        /// <param name="status">Resource type dependent status..</param>
        /// <param name="storage">The storage identifier (for type &#39;storage&#39;)..</param>
        /// <param name="tags">The guest&#39;s tags (for types &#39;qemu&#39; and &#39;lxc&#39;).</param>
        /// <param name="template">Determines if the guest is a template. (for types &#39;qemu&#39; and &#39;lxc&#39;).</param>
        /// <param name="type">Resource type..</param>
        /// <param name="uptime">Uptime of node or virtual guest in seconds (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="vmid">The numerical vmid (for types &#39;qemu&#39; and &#39;lxc&#39;)..</param>
        /// <param name="zoneType">The type of an SDN zone (for type &#39;sdn&#39;)..</param>
        public GetClusterResources200ResponseDataInner(Int64 cgroupMode = default(Int64), string content = default(string), decimal cpu = default(decimal), Int64 disk = default(Int64), Int64 diskread = default(Int64), Int64 diskwrite = default(Int64), string hastate = default(string), string id = default(string), string level = default(string), string varLock = default(string), decimal maxcpu = default(decimal), 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), string network = default(string), string networkType = default(string), string node = default(string), string plugintype = default(string), string pool = default(string), string protocol = default(string), string sdn = default(string), string status = default(string), string storage = default(string), string tags = default(string), Int64 template = default(Int64), string type = default(string), Int64 uptime = default(Int64), Int64 vmid = default(Int64), string zoneType = default(string))
        {
            this.CgroupMode = cgroupMode;
            this.Content = content;
            this.Cpu = cpu;
            this.Disk = disk;
            this.Diskread = diskread;
            this.Diskwrite = diskwrite;
            this.Hastate = hastate;
            this.Id = id;
            this.Level = level;
            this.Lock = varLock;
            this.Maxcpu = maxcpu;
            this.Maxdisk = maxdisk;
            this.Maxmem = maxmem;
            this.Mem = mem;
            this.Memhost = memhost;
            this.Name = name;
            this.Netin = netin;
            this.Netout = netout;
            this.Network = network;
            this.NetworkType = networkType;
            this.Node = node;
            this.Plugintype = plugintype;
            this.Pool = pool;
            this.Protocol = protocol;
            this.Sdn = sdn;
            this.Status = status;
            this.Storage = storage;
            this.Tags = tags;
            this.Template = template;
            this.Type = type;
            this.Uptime = uptime;
            this.Vmid = vmid;
            this.ZoneType = zoneType;
        }

        /// <summary>
        /// The cgroup mode the node operates under (for type &#39;node&#39;).
        /// </summary>
        /// <value>The cgroup mode the node operates under (for type &#39;node&#39;).</value>
        [DataMember(Name = "cgroup-mode", EmitDefaultValue = false)]
        public Int64 CgroupMode { get; set; }

        /// <summary>
        /// Allowed storage content types (for type &#39;storage&#39;).
        /// </summary>
        /// <value>Allowed storage content types (for type &#39;storage&#39;).</value>
        [DataMember(Name = "content", EmitDefaultValue = false)]
        public string Content { get; set; }

        /// <summary>
        /// CPU utilization (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>CPU utilization (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "cpu", EmitDefaultValue = false)]
        public decimal Cpu { get; set; }

        /// <summary>
        /// Used disk space in bytes (for type &#39;storage&#39;), used root image space for VMs (for types &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>Used disk space in bytes (for type &#39;storage&#39;), used root image space for VMs (for types &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "disk", EmitDefaultValue = false)]
        public Int64 Disk { get; set; }

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

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

        /// <summary>
        /// HA service status (for HA managed VMs).
        /// </summary>
        /// <value>HA service status (for HA managed VMs).</value>
        [DataMember(Name = "hastate", EmitDefaultValue = false)]
        public string Hastate { get; set; }

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

        /// <summary>
        /// Support level (for type &#39;node&#39;).
        /// </summary>
        /// <value>Support level (for type &#39;node&#39;).</value>
        [DataMember(Name = "level", EmitDefaultValue = false)]
        public string Level { get; set; }

        /// <summary>
        /// The guest&#39;s current config lock (for types &#39;qemu&#39; and &#39;lxc&#39;)
        /// </summary>
        /// <value>The guest&#39;s current config lock (for types &#39;qemu&#39; and &#39;lxc&#39;)</value>
        [DataMember(Name = "lock", EmitDefaultValue = false)]
        public string Lock { get; set; }

        /// <summary>
        /// Number of available CPUs (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>Number of available CPUs (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "maxcpu", EmitDefaultValue = false)]
        public decimal Maxcpu { get; set; }

        /// <summary>
        /// Storage size in bytes (for type &#39;storage&#39;), root image size for VMs (for types &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>Storage size in bytes (for type &#39;storage&#39;), root image size for VMs (for types &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "maxdisk", EmitDefaultValue = false)]
        public Int64 Maxdisk { get; set; }

        /// <summary>
        /// Number of available memory in bytes (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>Number of available memory in bytes (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "maxmem", EmitDefaultValue = false)]
        public Int64 Maxmem { get; set; }

        /// <summary>
        /// Used memory in bytes (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>Used memory in bytes (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "mem", EmitDefaultValue = false)]
        public Int64 Mem { get; set; }

        /// <summary>
        /// Used memory in bytes from the point of view of the host (for types &#39;qemu&#39;).
        /// </summary>
        /// <value>Used memory in bytes from the point of view of the host (for types &#39;qemu&#39;).</value>
        [DataMember(Name = "memhost", EmitDefaultValue = false)]
        public Int64 Memhost { get; set; }

        /// <summary>
        /// Name of the resource.
        /// </summary>
        /// <value>Name of the resource.</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. (for types &#39;qemu&#39; and &#39;lxc&#39;)
        /// </summary>
        /// <value>The amount of traffic in bytes that was sent to the guest over the network since it was started. (for types &#39;qemu&#39; and &#39;lxc&#39;)</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. (for types &#39;qemu&#39; and &#39;lxc&#39;)
        /// </summary>
        /// <value>The amount of traffic in bytes that was sent from the guest over the network since it was started. (for types &#39;qemu&#39; and &#39;lxc&#39;)</value>
        [DataMember(Name = "netout", EmitDefaultValue = false)]
        public Int64 Netout { get; set; }

        /// <summary>
        /// The name of a Network entity (for type &#39;network&#39;).
        /// </summary>
        /// <value>The name of a Network entity (for type &#39;network&#39;).</value>
        [DataMember(Name = "network", EmitDefaultValue = false)]
        public string Network { get; set; }

        /// <summary>
        /// The type of network resource (for type &#39;network&#39;).
        /// </summary>
        /// <value>The type of network resource (for type &#39;network&#39;).</value>
        [DataMember(Name = "network-type", EmitDefaultValue = false)]
        public string NetworkType { get; set; }

        /// <summary>
        /// The cluster node name (for types &#39;node&#39;, &#39;storage&#39;, &#39;qemu&#39;, and &#39;lxc&#39;).
        /// </summary>
        /// <value>The cluster node name (for types &#39;node&#39;, &#39;storage&#39;, &#39;qemu&#39;, and &#39;lxc&#39;).</value>
        [DataMember(Name = "node", EmitDefaultValue = false)]
        public string Node { get; set; }

        /// <summary>
        /// More specific type, if available.
        /// </summary>
        /// <value>More specific type, if available.</value>
        [DataMember(Name = "plugintype", EmitDefaultValue = false)]
        public string Plugintype { get; set; }

        /// <summary>
        /// The pool name (for types &#39;pool&#39;, &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>The pool name (for types &#39;pool&#39;, &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "pool", EmitDefaultValue = false)]
        public string Pool { get; set; }

        /// <summary>
        /// The protocol of a fabric (for type &#39;network&#39;, network-type &#39;fabric&#39;).
        /// </summary>
        /// <value>The protocol of a fabric (for type &#39;network&#39;, network-type &#39;fabric&#39;).</value>
        [DataMember(Name = "protocol", EmitDefaultValue = false)]
        public string Protocol { get; set; }

        /// <summary>
        /// The name of an SDN entity (for type &#39;sdn&#39;)
        /// </summary>
        /// <value>The name of an SDN entity (for type &#39;sdn&#39;)</value>
        [DataMember(Name = "sdn", EmitDefaultValue = false)]
        public string Sdn { get; set; }

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

        /// <summary>
        /// The storage identifier (for type &#39;storage&#39;).
        /// </summary>
        /// <value>The storage identifier (for type &#39;storage&#39;).</value>
        [DataMember(Name = "storage", EmitDefaultValue = false)]
        public string Storage { get; set; }

        /// <summary>
        /// The guest&#39;s tags (for types &#39;qemu&#39; and &#39;lxc&#39;)
        /// </summary>
        /// <value>The guest&#39;s tags (for types &#39;qemu&#39; and &#39;lxc&#39;)</value>
        [DataMember(Name = "tags", EmitDefaultValue = false)]
        public string Tags { get; set; }

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

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

        /// <summary>
        /// Uptime of node or virtual guest in seconds (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>Uptime of node or virtual guest in seconds (for types &#39;node&#39;, &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "uptime", EmitDefaultValue = false)]
        public Int64 Uptime { get; set; }

        /// <summary>
        /// The numerical vmid (for types &#39;qemu&#39; and &#39;lxc&#39;).
        /// </summary>
        /// <value>The numerical vmid (for types &#39;qemu&#39; and &#39;lxc&#39;).</value>
        [DataMember(Name = "vmid", EmitDefaultValue = false)]
        public Int64 Vmid { get; set; }

        /// <summary>
        /// The type of an SDN zone (for type &#39;sdn&#39;).
        /// </summary>
        /// <value>The type of an SDN zone (for type &#39;sdn&#39;).</value>
        [DataMember(Name = "zone-type", EmitDefaultValue = false)]
        public string ZoneType { 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 GetClusterResources200ResponseDataInner {\n");
            sb.Append("  CgroupMode: ").Append(CgroupMode).Append("\n");
            sb.Append("  Content: ").Append(Content).Append("\n");
            sb.Append("  Cpu: ").Append(Cpu).Append("\n");
            sb.Append("  Disk: ").Append(Disk).Append("\n");
            sb.Append("  Diskread: ").Append(Diskread).Append("\n");
            sb.Append("  Diskwrite: ").Append(Diskwrite).Append("\n");
            sb.Append("  Hastate: ").Append(Hastate).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Level: ").Append(Level).Append("\n");
            sb.Append("  Lock: ").Append(Lock).Append("\n");
            sb.Append("  Maxcpu: ").Append(Maxcpu).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("  Network: ").Append(Network).Append("\n");
            sb.Append("  NetworkType: ").Append(NetworkType).Append("\n");
            sb.Append("  Node: ").Append(Node).Append("\n");
            sb.Append("  Plugintype: ").Append(Plugintype).Append("\n");
            sb.Append("  Pool: ").Append(Pool).Append("\n");
            sb.Append("  Protocol: ").Append(Protocol).Append("\n");
            sb.Append("  Sdn: ").Append(Sdn).Append("\n");
            sb.Append("  Status: ").Append(Status).Append("\n");
            sb.Append("  Storage: ").Append(Storage).Append("\n");
            sb.Append("  Tags: ").Append(Tags).Append("\n");
            sb.Append("  Template: ").Append(Template).Append("\n");
            sb.Append("  Type: ").Append(Type).Append("\n");
            sb.Append("  Uptime: ").Append(Uptime).Append("\n");
            sb.Append("  Vmid: ").Append(Vmid).Append("\n");
            sb.Append("  ZoneType: ").Append(ZoneType).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;
        }
    }

}
