/*
 * 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>
    /// UpdateClusterOptionsRequest
    /// </summary>
    [DataContract(Name = "UpdateClusterOptionsRequest")]
    public partial class UpdateClusterOptionsRequest : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateClusterOptionsRequest" /> class.
        /// </summary>
        /// <param name="bwlimit">bwlimit.</param>
        /// <param name="consentText">consentText.</param>
        /// <param name="console">console.</param>
        /// <param name="crs">crs.</param>
        /// <param name="delete">delete.</param>
        /// <param name="description">description.</param>
        /// <param name="emailFrom">emailFrom.</param>
        /// <param name="fencing">fencing.</param>
        /// <param name="ha">ha.</param>
        /// <param name="httpProxy">httpProxy.</param>
        /// <param name="keyboard">keyboard.</param>
        /// <param name="language">language.</param>
        /// <param name="macPrefix">macPrefix.</param>
        /// <param name="maxWorkers">maxWorkers.</param>
        /// <param name="migration">migration.</param>
        /// <param name="migrationUnsecure">migrationUnsecure.</param>
        /// <param name="nextId">nextId.</param>
        /// <param name="notify">notify.</param>
        /// <param name="registeredTags">registeredTags.</param>
        /// <param name="replication">replication.</param>
        /// <param name="tagStyle">tagStyle.</param>
        /// <param name="u2f">u2f.</param>
        /// <param name="userTagAccess">userTagAccess.</param>
        /// <param name="webauthn">webauthn.</param>
        public UpdateClusterOptionsRequest(string bwlimit = default(string), string consentText = default(string), string console = default(string), string crs = default(string), string delete = default(string), string description = default(string), string emailFrom = default(string), string fencing = default(string), string ha = default(string), string httpProxy = default(string), string keyboard = default(string), string language = default(string), string macPrefix = default(string), int maxWorkers = default(int), string migration = default(string), bool migrationUnsecure = default(bool), string nextId = default(string), string notify = default(string), string registeredTags = default(string), string replication = default(string), string tagStyle = default(string), string u2f = default(string), string userTagAccess = default(string), string webauthn = default(string))
        {
            this.Bwlimit = bwlimit;
            this.ConsentText = consentText;
            this.Console = console;
            this.Crs = crs;
            this.Delete = delete;
            this.Description = description;
            this.EmailFrom = emailFrom;
            this.Fencing = fencing;
            this.Ha = ha;
            this.HttpProxy = httpProxy;
            this.Keyboard = keyboard;
            this.Language = language;
            this.MacPrefix = macPrefix;
            this.MaxWorkers = maxWorkers;
            this.Migration = migration;
            this.MigrationUnsecure = migrationUnsecure;
            this.NextId = nextId;
            this.Notify = notify;
            this.RegisteredTags = registeredTags;
            this.Replication = replication;
            this.TagStyle = tagStyle;
            this.U2f = u2f;
            this.UserTagAccess = userTagAccess;
            this.Webauthn = webauthn;
        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        /// <summary>
        /// Gets or Sets MigrationUnsecure
        /// </summary>
        [DataMember(Name = "migration_unsecure", EmitDefaultValue = true)]
        public bool MigrationUnsecure { get; set; }

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

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

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

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

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

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

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

        /// <summary>
        /// Gets or Sets Webauthn
        /// </summary>
        [DataMember(Name = "webauthn", EmitDefaultValue = false)]
        public string Webauthn { 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 UpdateClusterOptionsRequest {\n");
            sb.Append("  Bwlimit: ").Append(Bwlimit).Append("\n");
            sb.Append("  ConsentText: ").Append(ConsentText).Append("\n");
            sb.Append("  Console: ").Append(Console).Append("\n");
            sb.Append("  Crs: ").Append(Crs).Append("\n");
            sb.Append("  Delete: ").Append(Delete).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  EmailFrom: ").Append(EmailFrom).Append("\n");
            sb.Append("  Fencing: ").Append(Fencing).Append("\n");
            sb.Append("  Ha: ").Append(Ha).Append("\n");
            sb.Append("  HttpProxy: ").Append(HttpProxy).Append("\n");
            sb.Append("  Keyboard: ").Append(Keyboard).Append("\n");
            sb.Append("  Language: ").Append(Language).Append("\n");
            sb.Append("  MacPrefix: ").Append(MacPrefix).Append("\n");
            sb.Append("  MaxWorkers: ").Append(MaxWorkers).Append("\n");
            sb.Append("  Migration: ").Append(Migration).Append("\n");
            sb.Append("  MigrationUnsecure: ").Append(MigrationUnsecure).Append("\n");
            sb.Append("  NextId: ").Append(NextId).Append("\n");
            sb.Append("  Notify: ").Append(Notify).Append("\n");
            sb.Append("  RegisteredTags: ").Append(RegisteredTags).Append("\n");
            sb.Append("  Replication: ").Append(Replication).Append("\n");
            sb.Append("  TagStyle: ").Append(TagStyle).Append("\n");
            sb.Append("  U2f: ").Append(U2f).Append("\n");
            sb.Append("  UserTagAccess: ").Append(UserTagAccess).Append("\n");
            sb.Append("  Webauthn: ").Append(Webauthn).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;
        }
    }

}
