/*
 * 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>
    /// UpdateClusterSDNZoneRequest
    /// </summary>
    [DataContract(Name = "UpdateClusterSDNZoneRequest")]
    public partial class UpdateClusterSDNZoneRequest : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="UpdateClusterSDNZoneRequest" /> class.
        /// </summary>
        /// <param name="advertiseSubnets">advertiseSubnets.</param>
        /// <param name="bridge">bridge.</param>
        /// <param name="bridgeDisableMacLearning">bridgeDisableMacLearning.</param>
        /// <param name="controller">controller.</param>
        /// <param name="delete">delete.</param>
        /// <param name="dhcp">dhcp.</param>
        /// <param name="digest">digest.</param>
        /// <param name="disableArpNdSuppression">disableArpNdSuppression.</param>
        /// <param name="dns">dns.</param>
        /// <param name="dnszone">dnszone.</param>
        /// <param name="dpId">dpId.</param>
        /// <param name="exitnodes">exitnodes.</param>
        /// <param name="exitnodesLocalRouting">exitnodesLocalRouting.</param>
        /// <param name="exitnodesPrimary">exitnodesPrimary.</param>
        /// <param name="fabric">fabric.</param>
        /// <param name="ipam">ipam.</param>
        /// <param name="lockToken">lockToken.</param>
        /// <param name="mac">mac.</param>
        /// <param name="mtu">mtu.</param>
        /// <param name="nodes">nodes.</param>
        /// <param name="peers">peers.</param>
        /// <param name="reversedns">reversedns.</param>
        /// <param name="rtImport">rtImport.</param>
        /// <param name="tag">tag.</param>
        /// <param name="vlanProtocol">vlanProtocol.</param>
        /// <param name="vrfVxlan">vrfVxlan.</param>
        /// <param name="vxlanPort">vxlanPort.</param>
        public UpdateClusterSDNZoneRequest(bool advertiseSubnets = default(bool), string bridge = default(string), bool bridgeDisableMacLearning = default(bool), string controller = default(string), string delete = default(string), string dhcp = default(string), string digest = default(string), bool disableArpNdSuppression = default(bool), string dns = default(string), string dnszone = default(string), int dpId = default(int), string exitnodes = default(string), bool exitnodesLocalRouting = default(bool), string exitnodesPrimary = default(string), string fabric = default(string), string ipam = default(string), string lockToken = default(string), string mac = default(string), int mtu = default(int), string nodes = default(string), string peers = default(string), string reversedns = default(string), string rtImport = default(string), int tag = default(int), string vlanProtocol = default(string), int vrfVxlan = default(int), int vxlanPort = default(int))
        {
            this.AdvertiseSubnets = advertiseSubnets;
            this.Bridge = bridge;
            this.BridgeDisableMacLearning = bridgeDisableMacLearning;
            this.Controller = controller;
            this.Delete = delete;
            this.Dhcp = dhcp;
            this.Digest = digest;
            this.DisableArpNdSuppression = disableArpNdSuppression;
            this.Dns = dns;
            this.Dnszone = dnszone;
            this.DpId = dpId;
            this.Exitnodes = exitnodes;
            this.ExitnodesLocalRouting = exitnodesLocalRouting;
            this.ExitnodesPrimary = exitnodesPrimary;
            this.Fabric = fabric;
            this.Ipam = ipam;
            this.LockToken = lockToken;
            this.Mac = mac;
            this.Mtu = mtu;
            this.Nodes = nodes;
            this.Peers = peers;
            this.Reversedns = reversedns;
            this.RtImport = rtImport;
            this.Tag = tag;
            this.VlanProtocol = vlanProtocol;
            this.VrfVxlan = vrfVxlan;
            this.VxlanPort = vxlanPort;
        }

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

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

        /// <summary>
        /// Gets or Sets BridgeDisableMacLearning
        /// </summary>
        [DataMember(Name = "bridge-disable-mac-learning", EmitDefaultValue = true)]
        public bool BridgeDisableMacLearning { get; set; }

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

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

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

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

        /// <summary>
        /// Gets or Sets DisableArpNdSuppression
        /// </summary>
        [DataMember(Name = "disable-arp-nd-suppression", EmitDefaultValue = true)]
        public bool DisableArpNdSuppression { get; set; }

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

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

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

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

        /// <summary>
        /// Gets or Sets ExitnodesLocalRouting
        /// </summary>
        [DataMember(Name = "exitnodes-local-routing", EmitDefaultValue = true)]
        public bool ExitnodesLocalRouting { get; set; }

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

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

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

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

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

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

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

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

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

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

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

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

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

        /// <summary>
        /// Gets or Sets VxlanPort
        /// </summary>
        [DataMember(Name = "vxlan-port", EmitDefaultValue = false)]
        public int VxlanPort { 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 UpdateClusterSDNZoneRequest {\n");
            sb.Append("  AdvertiseSubnets: ").Append(AdvertiseSubnets).Append("\n");
            sb.Append("  Bridge: ").Append(Bridge).Append("\n");
            sb.Append("  BridgeDisableMacLearning: ").Append(BridgeDisableMacLearning).Append("\n");
            sb.Append("  Controller: ").Append(Controller).Append("\n");
            sb.Append("  Delete: ").Append(Delete).Append("\n");
            sb.Append("  Dhcp: ").Append(Dhcp).Append("\n");
            sb.Append("  Digest: ").Append(Digest).Append("\n");
            sb.Append("  DisableArpNdSuppression: ").Append(DisableArpNdSuppression).Append("\n");
            sb.Append("  Dns: ").Append(Dns).Append("\n");
            sb.Append("  Dnszone: ").Append(Dnszone).Append("\n");
            sb.Append("  DpId: ").Append(DpId).Append("\n");
            sb.Append("  Exitnodes: ").Append(Exitnodes).Append("\n");
            sb.Append("  ExitnodesLocalRouting: ").Append(ExitnodesLocalRouting).Append("\n");
            sb.Append("  ExitnodesPrimary: ").Append(ExitnodesPrimary).Append("\n");
            sb.Append("  Fabric: ").Append(Fabric).Append("\n");
            sb.Append("  Ipam: ").Append(Ipam).Append("\n");
            sb.Append("  LockToken: ").Append(LockToken).Append("\n");
            sb.Append("  Mac: ").Append(Mac).Append("\n");
            sb.Append("  Mtu: ").Append(Mtu).Append("\n");
            sb.Append("  Nodes: ").Append(Nodes).Append("\n");
            sb.Append("  Peers: ").Append(Peers).Append("\n");
            sb.Append("  Reversedns: ").Append(Reversedns).Append("\n");
            sb.Append("  RtImport: ").Append(RtImport).Append("\n");
            sb.Append("  Tag: ").Append(Tag).Append("\n");
            sb.Append("  VlanProtocol: ").Append(VlanProtocol).Append("\n");
            sb.Append("  VrfVxlan: ").Append(VrfVxlan).Append("\n");
            sb.Append("  VxlanPort: ").Append(VxlanPort).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;
        }
    }

}
