/*
 * 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>
    /// GetClusterStatus200ResponseDataInner
    /// </summary>
    [DataContract(Name = "getClusterStatus_200_response_data_inner")]
    public partial class GetClusterStatus200ResponseDataInner : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetClusterStatus200ResponseDataInner" /> class.
        /// </summary>
        /// <param name="id">id.</param>
        /// <param name="ip">[node] IP of the resolved nodename..</param>
        /// <param name="level">[node] Proxmox VE Subscription level, indicates if eligible for enterprise support as well as access to the stable Proxmox VE Enterprise Repository..</param>
        /// <param name="local">[node] Indicates if this is the responding node..</param>
        /// <param name="name">name.</param>
        /// <param name="nodeid">[node] ID of the node from the corosync configuration..</param>
        /// <param name="nodes">[cluster] Nodes count, including offline nodes..</param>
        /// <param name="online">[node] Indicates if the node is online or offline..</param>
        /// <param name="quorate">[cluster] Indicates if there is a majority of nodes online to make decisions.</param>
        /// <param name="type">Indicates the type, either cluster or node. The type defines the object properties e.g. quorate available for type cluster..</param>
        /// <param name="varVersion">[cluster] Current version of the corosync configuration file..</param>
        public GetClusterStatus200ResponseDataInner(string id = default(string), string ip = default(string), string level = default(string), Int64 local = default(Int64), string name = default(string), Int64 nodeid = default(Int64), Int64 nodes = default(Int64), Int64 online = default(Int64), Int64 quorate = default(Int64), string type = default(string), Int64 varVersion = default(Int64))
        {
            this.Id = id;
            this.Ip = ip;
            this.Level = level;
            this.Local = local;
            this.Name = name;
            this.Nodeid = nodeid;
            this.Nodes = nodes;
            this.Online = online;
            this.Quorate = quorate;
            this.Type = type;
            this.VarVersion = varVersion;
        }

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

        /// <summary>
        /// [node] IP of the resolved nodename.
        /// </summary>
        /// <value>[node] IP of the resolved nodename.</value>
        [DataMember(Name = "ip", EmitDefaultValue = false)]
        public string Ip { get; set; }

        /// <summary>
        /// [node] Proxmox VE Subscription level, indicates if eligible for enterprise support as well as access to the stable Proxmox VE Enterprise Repository.
        /// </summary>
        /// <value>[node] Proxmox VE Subscription level, indicates if eligible for enterprise support as well as access to the stable Proxmox VE Enterprise Repository.</value>
        [DataMember(Name = "level", EmitDefaultValue = false)]
        public string Level { get; set; }

        /// <summary>
        /// [node] Indicates if this is the responding node.
        /// </summary>
        /// <value>[node] Indicates if this is the responding node.</value>
        [DataMember(Name = "local", EmitDefaultValue = false)]
        public Int64 Local { get; set; }

        /// <summary>
        /// Gets or Sets Name
        /// </summary>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// [node] ID of the node from the corosync configuration.
        /// </summary>
        /// <value>[node] ID of the node from the corosync configuration.</value>
        [DataMember(Name = "nodeid", EmitDefaultValue = false)]
        public Int64 Nodeid { get; set; }

        /// <summary>
        /// [cluster] Nodes count, including offline nodes.
        /// </summary>
        /// <value>[cluster] Nodes count, including offline nodes.</value>
        [DataMember(Name = "nodes", EmitDefaultValue = false)]
        public Int64 Nodes { get; set; }

        /// <summary>
        /// [node] Indicates if the node is online or offline.
        /// </summary>
        /// <value>[node] Indicates if the node is online or offline.</value>
        [DataMember(Name = "online", EmitDefaultValue = false)]
        public Int64 Online { get; set; }

        /// <summary>
        /// [cluster] Indicates if there is a majority of nodes online to make decisions
        /// </summary>
        /// <value>[cluster] Indicates if there is a majority of nodes online to make decisions</value>
        [DataMember(Name = "quorate", EmitDefaultValue = false)]
        public Int64 Quorate { get; set; }

        /// <summary>
        /// Indicates the type, either cluster or node. The type defines the object properties e.g. quorate available for type cluster.
        /// </summary>
        /// <value>Indicates the type, either cluster or node. The type defines the object properties e.g. quorate available for type cluster.</value>
        [DataMember(Name = "type", EmitDefaultValue = false)]
        public string Type { get; set; }

        /// <summary>
        /// [cluster] Current version of the corosync configuration file.
        /// </summary>
        /// <value>[cluster] Current version of the corosync configuration file.</value>
        [DataMember(Name = "version", EmitDefaultValue = false)]
        public Int64 VarVersion { 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 GetClusterStatus200ResponseDataInner {\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  Ip: ").Append(Ip).Append("\n");
            sb.Append("  Level: ").Append(Level).Append("\n");
            sb.Append("  Local: ").Append(Local).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  Nodeid: ").Append(Nodeid).Append("\n");
            sb.Append("  Nodes: ").Append(Nodes).Append("\n");
            sb.Append("  Online: ").Append(Online).Append("\n");
            sb.Append("  Quorate: ").Append(Quorate).Append("\n");
            sb.Append("  Type: ").Append(Type).Append("\n");
            sb.Append("  VarVersion: ").Append(VarVersion).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;
        }
    }

}
