/*
 * 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>
    /// CreateClusterConfigRequest
    /// </summary>
    [DataContract(Name = "CreateClusterConfigRequest")]
    public partial class CreateClusterConfigRequest : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateClusterConfigRequest" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected CreateClusterConfigRequest() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateClusterConfigRequest" /> class.
        /// </summary>
        /// <param name="clustername">clustername (required).</param>
        /// <param name="link0">link0.</param>
        /// <param name="link1">link1.</param>
        /// <param name="link2">link2.</param>
        /// <param name="link3">link3.</param>
        /// <param name="link4">link4.</param>
        /// <param name="link5">link5.</param>
        /// <param name="link6">link6.</param>
        /// <param name="link7">link7.</param>
        /// <param name="link8">link8.</param>
        /// <param name="link9">link9.</param>
        /// <param name="link10">link10.</param>
        /// <param name="link11">link11.</param>
        /// <param name="link12">link12.</param>
        /// <param name="link13">link13.</param>
        /// <param name="link14">link14.</param>
        /// <param name="link15">link15.</param>
        /// <param name="link16">link16.</param>
        /// <param name="link17">link17.</param>
        /// <param name="link18">link18.</param>
        /// <param name="link19">link19.</param>
        /// <param name="link20">link20.</param>
        /// <param name="link21">link21.</param>
        /// <param name="link22">link22.</param>
        /// <param name="link23">link23.</param>
        /// <param name="link24">link24.</param>
        /// <param name="link25">link25.</param>
        /// <param name="link26">link26.</param>
        /// <param name="link27">link27.</param>
        /// <param name="link28">link28.</param>
        /// <param name="link29">link29.</param>
        /// <param name="nodeid">nodeid.</param>
        /// <param name="votes">votes.</param>
        public CreateClusterConfigRequest(string clustername = default(string), string link0 = default(string), string link1 = default(string), string link2 = default(string), string link3 = default(string), string link4 = default(string), string link5 = default(string), string link6 = default(string), string link7 = default(string), string link8 = default(string), string link9 = default(string), string link10 = default(string), string link11 = default(string), string link12 = default(string), string link13 = default(string), string link14 = default(string), string link15 = default(string), string link16 = default(string), string link17 = default(string), string link18 = default(string), string link19 = default(string), string link20 = default(string), string link21 = default(string), string link22 = default(string), string link23 = default(string), string link24 = default(string), string link25 = default(string), string link26 = default(string), string link27 = default(string), string link28 = default(string), string link29 = default(string), int nodeid = default(int), int votes = default(int))
        {
            // to ensure "clustername" is required (not null)
            if (clustername == null)
            {
                throw new ArgumentNullException("clustername is a required property for CreateClusterConfigRequest and cannot be null");
            }
            this.Clustername = clustername;
            this.Link0 = link0;
            this.Link1 = link1;
            this.Link2 = link2;
            this.Link3 = link3;
            this.Link4 = link4;
            this.Link5 = link5;
            this.Link6 = link6;
            this.Link7 = link7;
            this.Link8 = link8;
            this.Link9 = link9;
            this.Link10 = link10;
            this.Link11 = link11;
            this.Link12 = link12;
            this.Link13 = link13;
            this.Link14 = link14;
            this.Link15 = link15;
            this.Link16 = link16;
            this.Link17 = link17;
            this.Link18 = link18;
            this.Link19 = link19;
            this.Link20 = link20;
            this.Link21 = link21;
            this.Link22 = link22;
            this.Link23 = link23;
            this.Link24 = link24;
            this.Link25 = link25;
            this.Link26 = link26;
            this.Link27 = link27;
            this.Link28 = link28;
            this.Link29 = link29;
            this.Nodeid = nodeid;
            this.Votes = votes;
        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        /// <summary>
        /// Gets or Sets Votes
        /// </summary>
        [DataMember(Name = "votes", EmitDefaultValue = false)]
        public int Votes { 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 CreateClusterConfigRequest {\n");
            sb.Append("  Clustername: ").Append(Clustername).Append("\n");
            sb.Append("  Link0: ").Append(Link0).Append("\n");
            sb.Append("  Link1: ").Append(Link1).Append("\n");
            sb.Append("  Link2: ").Append(Link2).Append("\n");
            sb.Append("  Link3: ").Append(Link3).Append("\n");
            sb.Append("  Link4: ").Append(Link4).Append("\n");
            sb.Append("  Link5: ").Append(Link5).Append("\n");
            sb.Append("  Link6: ").Append(Link6).Append("\n");
            sb.Append("  Link7: ").Append(Link7).Append("\n");
            sb.Append("  Link8: ").Append(Link8).Append("\n");
            sb.Append("  Link9: ").Append(Link9).Append("\n");
            sb.Append("  Link10: ").Append(Link10).Append("\n");
            sb.Append("  Link11: ").Append(Link11).Append("\n");
            sb.Append("  Link12: ").Append(Link12).Append("\n");
            sb.Append("  Link13: ").Append(Link13).Append("\n");
            sb.Append("  Link14: ").Append(Link14).Append("\n");
            sb.Append("  Link15: ").Append(Link15).Append("\n");
            sb.Append("  Link16: ").Append(Link16).Append("\n");
            sb.Append("  Link17: ").Append(Link17).Append("\n");
            sb.Append("  Link18: ").Append(Link18).Append("\n");
            sb.Append("  Link19: ").Append(Link19).Append("\n");
            sb.Append("  Link20: ").Append(Link20).Append("\n");
            sb.Append("  Link21: ").Append(Link21).Append("\n");
            sb.Append("  Link22: ").Append(Link22).Append("\n");
            sb.Append("  Link23: ").Append(Link23).Append("\n");
            sb.Append("  Link24: ").Append(Link24).Append("\n");
            sb.Append("  Link25: ").Append(Link25).Append("\n");
            sb.Append("  Link26: ").Append(Link26).Append("\n");
            sb.Append("  Link27: ").Append(Link27).Append("\n");
            sb.Append("  Link28: ").Append(Link28).Append("\n");
            sb.Append("  Link29: ").Append(Link29).Append("\n");
            sb.Append("  Nodeid: ").Append(Nodeid).Append("\n");
            sb.Append("  Votes: ").Append(Votes).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;
        }
    }

}
