/*
 * 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>
    /// CreateNodesSingleVzdumpRequest
    /// </summary>
    [DataContract(Name = "CreateNodesSingleVzdumpRequest")]
    public partial class CreateNodesSingleVzdumpRequest : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="CreateNodesSingleVzdumpRequest" /> class.
        /// </summary>
        /// <param name="all">all.</param>
        /// <param name="bwlimit">bwlimit.</param>
        /// <param name="compress">compress.</param>
        /// <param name="dumpdir">dumpdir.</param>
        /// <param name="exclude">exclude.</param>
        /// <param name="excludePath">excludePath.</param>
        /// <param name="fleecing">fleecing.</param>
        /// <param name="ionice">ionice.</param>
        /// <param name="jobId">jobId.</param>
        /// <param name="lockwait">lockwait.</param>
        /// <param name="mailnotification">mailnotification.</param>
        /// <param name="mailto">mailto.</param>
        /// <param name="maxfiles">maxfiles.</param>
        /// <param name="mode">mode.</param>
        /// <param name="notesTemplate">notesTemplate.</param>
        /// <param name="notificationMode">notificationMode.</param>
        /// <param name="pbsChangeDetectionMode">pbsChangeDetectionMode.</param>
        /// <param name="performance">performance.</param>
        /// <param name="pigz">pigz.</param>
        /// <param name="pool">pool.</param>
        /// <param name="varProtected">varProtected.</param>
        /// <param name="pruneBackups">pruneBackups.</param>
        /// <param name="quiet">quiet.</param>
        /// <param name="remove">remove.</param>
        /// <param name="script">script.</param>
        /// <param name="stdexcludes">stdexcludes.</param>
        /// <param name="stdout">stdout.</param>
        /// <param name="stop">stop.</param>
        /// <param name="stopwait">stopwait.</param>
        /// <param name="storage">storage.</param>
        /// <param name="tmpdir">tmpdir.</param>
        /// <param name="vmid">vmid.</param>
        /// <param name="zstd">zstd.</param>
        public CreateNodesSingleVzdumpRequest(bool all = default(bool), int bwlimit = default(int), string compress = default(string), string dumpdir = default(string), string exclude = default(string), List<string> excludePath = default(List<string>), string fleecing = default(string), int ionice = default(int), string jobId = default(string), int lockwait = default(int), string mailnotification = default(string), string mailto = default(string), int maxfiles = default(int), string mode = default(string), string notesTemplate = default(string), string notificationMode = default(string), string pbsChangeDetectionMode = default(string), string performance = default(string), int pigz = default(int), string pool = default(string), bool varProtected = default(bool), string pruneBackups = default(string), bool quiet = default(bool), bool remove = default(bool), string script = default(string), bool stdexcludes = default(bool), bool stdout = default(bool), bool stop = default(bool), int stopwait = default(int), string storage = default(string), string tmpdir = default(string), string vmid = default(string), int zstd = default(int))
        {
            this.All = all;
            this.Bwlimit = bwlimit;
            this.Compress = compress;
            this.Dumpdir = dumpdir;
            this.Exclude = exclude;
            this.ExcludePath = excludePath;
            this.Fleecing = fleecing;
            this.Ionice = ionice;
            this.JobId = jobId;
            this.Lockwait = lockwait;
            this.Mailnotification = mailnotification;
            this.Mailto = mailto;
            this.Maxfiles = maxfiles;
            this.Mode = mode;
            this.NotesTemplate = notesTemplate;
            this.NotificationMode = notificationMode;
            this.PbsChangeDetectionMode = pbsChangeDetectionMode;
            this.Performance = performance;
            this.Pigz = pigz;
            this.Pool = pool;
            this.Protected = varProtected;
            this.PruneBackups = pruneBackups;
            this.Quiet = quiet;
            this.Remove = remove;
            this.Script = script;
            this.Stdexcludes = stdexcludes;
            this.Stdout = stdout;
            this.Stop = stop;
            this.Stopwait = stopwait;
            this.Storage = storage;
            this.Tmpdir = tmpdir;
            this.Vmid = vmid;
            this.Zstd = zstd;
        }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        /// <summary>
        /// Gets or Sets PbsChangeDetectionMode
        /// </summary>
        [DataMember(Name = "pbs-change-detection-mode", EmitDefaultValue = false)]
        public string PbsChangeDetectionMode { get; set; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        /// <summary>
        /// Gets or Sets Zstd
        /// </summary>
        [DataMember(Name = "zstd", EmitDefaultValue = false)]
        public int Zstd { 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 CreateNodesSingleVzdumpRequest {\n");
            sb.Append("  All: ").Append(All).Append("\n");
            sb.Append("  Bwlimit: ").Append(Bwlimit).Append("\n");
            sb.Append("  Compress: ").Append(Compress).Append("\n");
            sb.Append("  Dumpdir: ").Append(Dumpdir).Append("\n");
            sb.Append("  Exclude: ").Append(Exclude).Append("\n");
            sb.Append("  ExcludePath: ").Append(ExcludePath).Append("\n");
            sb.Append("  Fleecing: ").Append(Fleecing).Append("\n");
            sb.Append("  Ionice: ").Append(Ionice).Append("\n");
            sb.Append("  JobId: ").Append(JobId).Append("\n");
            sb.Append("  Lockwait: ").Append(Lockwait).Append("\n");
            sb.Append("  Mailnotification: ").Append(Mailnotification).Append("\n");
            sb.Append("  Mailto: ").Append(Mailto).Append("\n");
            sb.Append("  Maxfiles: ").Append(Maxfiles).Append("\n");
            sb.Append("  Mode: ").Append(Mode).Append("\n");
            sb.Append("  NotesTemplate: ").Append(NotesTemplate).Append("\n");
            sb.Append("  NotificationMode: ").Append(NotificationMode).Append("\n");
            sb.Append("  PbsChangeDetectionMode: ").Append(PbsChangeDetectionMode).Append("\n");
            sb.Append("  Performance: ").Append(Performance).Append("\n");
            sb.Append("  Pigz: ").Append(Pigz).Append("\n");
            sb.Append("  Pool: ").Append(Pool).Append("\n");
            sb.Append("  Protected: ").Append(Protected).Append("\n");
            sb.Append("  PruneBackups: ").Append(PruneBackups).Append("\n");
            sb.Append("  Quiet: ").Append(Quiet).Append("\n");
            sb.Append("  Remove: ").Append(Remove).Append("\n");
            sb.Append("  Script: ").Append(Script).Append("\n");
            sb.Append("  Stdexcludes: ").Append(Stdexcludes).Append("\n");
            sb.Append("  Stdout: ").Append(Stdout).Append("\n");
            sb.Append("  Stop: ").Append(Stop).Append("\n");
            sb.Append("  Stopwait: ").Append(Stopwait).Append("\n");
            sb.Append("  Storage: ").Append(Storage).Append("\n");
            sb.Append("  Tmpdir: ").Append(Tmpdir).Append("\n");
            sb.Append("  Vmid: ").Append(Vmid).Append("\n");
            sb.Append("  Zstd: ").Append(Zstd).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;
        }
    }

}
