/*
 * 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>
    /// GetNodesSingleVzdumpDefaults200ResponseData
    /// </summary>
    [DataContract(Name = "getNodesSingleVzdumpDefaults_200_response_data")]
    public partial class GetNodesSingleVzdumpDefaults200ResponseData : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetNodesSingleVzdumpDefaults200ResponseData" /> class.
        /// </summary>
        /// <param name="all">Backup all known guest systems on this host..</param>
        /// <param name="bwlimit">Limit I/O bandwidth (in KiB/s)..</param>
        /// <param name="compress">Compress dump file..</param>
        /// <param name="dumpdir">Store resulting files to specified directory..</param>
        /// <param name="exclude">Exclude specified guest systems (assumes - -all).</param>
        /// <param name="excludePath">Exclude certain files/directories (shell globs). Paths starting with &#39;/&#39; are anchored to the container&#39;s root, other paths match relative to each subdirectory..</param>
        /// <param name="fleecing">Options for backup fleecing (VM only)..</param>
        /// <param name="ionice">Set IO priority when using the BFQ scheduler. For snapshot and suspend mode backups of VMs, this only affects the compressor. A value of 8 means the idle priority is used, otherwise the best-effort priority is used with the specified value..</param>
        /// <param name="lockwait">Maximal time to wait for the global lock (minutes)..</param>
        /// <param name="mailnotification">Deprecated: use notification targets/matchers instead. Specify when to send a notification mail.</param>
        /// <param name="mailto">Deprecated: Use notification targets/matchers instead. Comma-separated list of email addresses or users that should receive email notifications..</param>
        /// <param name="maxfiles">Deprecated: use &#39;prune-backups&#39; instead. Maximal number of backup files per guest system..</param>
        /// <param name="mode">Backup mode..</param>
        /// <param name="node">Only run if executed on this node..</param>
        /// <param name="notesTemplate">Template string for generating notes for the backup(s). It can contain variables which will be replaced by their values. Currently supported are {{cluster}}, {{guestname}}, {{node}}, and {{vmid}}, but more might be added in the future. Needs to be a single line, newline and backslash need to be escaped as &#39;\\n&#39; and &#39;\\\\&#39; respectively..</param>
        /// <param name="notificationMode">Determine which notification system to use. If set to &#39;legacy-sendmail&#39;, vzdump will consider the mailto/mailnotification parameters and send emails to the specified address(es) via the &#39;sendmail&#39; command. If set to &#39;notification-system&#39;, a notification will be sent via PVE&#39;s notification system, and the mailto and mailnotification will be ignored. If set to &#39;auto&#39; (default setting), an email will be sent if mailto is set, and the notification system will be used if not..</param>
        /// <param name="pbsChangeDetectionMode">PBS mode used to detect file changes and switch encoding format for container backups..</param>
        /// <param name="performance">Other performance-related settings..</param>
        /// <param name="pigz">Use pigz instead of gzip when N&gt;0. N&#x3D;1 uses half of cores, N&gt;1 uses N as thread count..</param>
        /// <param name="pool">Backup all known guest systems included in the specified pool..</param>
        /// <param name="varProtected">If true, mark backup(s) as protected..</param>
        /// <param name="pruneBackups">Use these retention options instead of those from the storage configuration..</param>
        /// <param name="quiet">Be quiet..</param>
        /// <param name="remove">Prune older backups according to &#39;prune-backups&#39;..</param>
        /// <param name="script">Use specified hook script..</param>
        /// <param name="stdexcludes">Exclude temporary files and logs..</param>
        /// <param name="stop">Stop running backup jobs on this host..</param>
        /// <param name="stopwait">Maximal time to wait until a guest system is stopped (minutes)..</param>
        /// <param name="storage">Store resulting file to this storage..</param>
        /// <param name="tmpdir">Store temporary files to specified directory..</param>
        /// <param name="vmid">The ID of the guest system you want to backup..</param>
        /// <param name="zstd">Zstd threads. N&#x3D;0 uses half of the available cores, if N is set to a value bigger than 0, N is used as thread count..</param>
        public GetNodesSingleVzdumpDefaults200ResponseData(Int64 all = default(Int64), Int64 bwlimit = default(Int64), string compress = default(string), string dumpdir = default(string), string exclude = default(string), List<string> excludePath = default(List<string>), string fleecing = default(string), Int64 ionice = default(Int64), Int64 lockwait = default(Int64), string mailnotification = default(string), string mailto = default(string), Int64 maxfiles = default(Int64), string mode = default(string), string node = default(string), string notesTemplate = default(string), string notificationMode = default(string), string pbsChangeDetectionMode = default(string), string performance = default(string), Int64 pigz = default(Int64), string pool = default(string), Int64 varProtected = default(Int64), string pruneBackups = default(string), Int64 quiet = default(Int64), Int64 remove = default(Int64), string script = default(string), Int64 stdexcludes = default(Int64), Int64 stop = default(Int64), Int64 stopwait = default(Int64), string storage = default(string), string tmpdir = default(string), string vmid = default(string), Int64 zstd = default(Int64))
        {
            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.Lockwait = lockwait;
            this.Mailnotification = mailnotification;
            this.Mailto = mailto;
            this.Maxfiles = maxfiles;
            this.Mode = mode;
            this.Node = node;
            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.Stop = stop;
            this.Stopwait = stopwait;
            this.Storage = storage;
            this.Tmpdir = tmpdir;
            this.Vmid = vmid;
            this.Zstd = zstd;
        }

        /// <summary>
        /// Backup all known guest systems on this host.
        /// </summary>
        /// <value>Backup all known guest systems on this host.</value>
        [DataMember(Name = "all", EmitDefaultValue = false)]
        public Int64 All { get; set; }

        /// <summary>
        /// Limit I/O bandwidth (in KiB/s).
        /// </summary>
        /// <value>Limit I/O bandwidth (in KiB/s).</value>
        [DataMember(Name = "bwlimit", EmitDefaultValue = false)]
        public Int64 Bwlimit { get; set; }

        /// <summary>
        /// Compress dump file.
        /// </summary>
        /// <value>Compress dump file.</value>
        [DataMember(Name = "compress", EmitDefaultValue = false)]
        public string Compress { get; set; }

        /// <summary>
        /// Store resulting files to specified directory.
        /// </summary>
        /// <value>Store resulting files to specified directory.</value>
        [DataMember(Name = "dumpdir", EmitDefaultValue = false)]
        public string Dumpdir { get; set; }

        /// <summary>
        /// Exclude specified guest systems (assumes - -all)
        /// </summary>
        /// <value>Exclude specified guest systems (assumes - -all)</value>
        [DataMember(Name = "exclude", EmitDefaultValue = false)]
        public string Exclude { get; set; }

        /// <summary>
        /// Exclude certain files/directories (shell globs). Paths starting with &#39;/&#39; are anchored to the container&#39;s root, other paths match relative to each subdirectory.
        /// </summary>
        /// <value>Exclude certain files/directories (shell globs). Paths starting with &#39;/&#39; are anchored to the container&#39;s root, other paths match relative to each subdirectory.</value>
        [DataMember(Name = "exclude-path", EmitDefaultValue = false)]
        public List<string> ExcludePath { get; set; }

        /// <summary>
        /// Options for backup fleecing (VM only).
        /// </summary>
        /// <value>Options for backup fleecing (VM only).</value>
        [DataMember(Name = "fleecing", EmitDefaultValue = false)]
        public string Fleecing { get; set; }

        /// <summary>
        /// Set IO priority when using the BFQ scheduler. For snapshot and suspend mode backups of VMs, this only affects the compressor. A value of 8 means the idle priority is used, otherwise the best-effort priority is used with the specified value.
        /// </summary>
        /// <value>Set IO priority when using the BFQ scheduler. For snapshot and suspend mode backups of VMs, this only affects the compressor. A value of 8 means the idle priority is used, otherwise the best-effort priority is used with the specified value.</value>
        [DataMember(Name = "ionice", EmitDefaultValue = false)]
        public Int64 Ionice { get; set; }

        /// <summary>
        /// Maximal time to wait for the global lock (minutes).
        /// </summary>
        /// <value>Maximal time to wait for the global lock (minutes).</value>
        [DataMember(Name = "lockwait", EmitDefaultValue = false)]
        public Int64 Lockwait { get; set; }

        /// <summary>
        /// Deprecated: use notification targets/matchers instead. Specify when to send a notification mail
        /// </summary>
        /// <value>Deprecated: use notification targets/matchers instead. Specify when to send a notification mail</value>
        [DataMember(Name = "mailnotification", EmitDefaultValue = false)]
        public string Mailnotification { get; set; }

        /// <summary>
        /// Deprecated: Use notification targets/matchers instead. Comma-separated list of email addresses or users that should receive email notifications.
        /// </summary>
        /// <value>Deprecated: Use notification targets/matchers instead. Comma-separated list of email addresses or users that should receive email notifications.</value>
        [DataMember(Name = "mailto", EmitDefaultValue = false)]
        public string Mailto { get; set; }

        /// <summary>
        /// Deprecated: use &#39;prune-backups&#39; instead. Maximal number of backup files per guest system.
        /// </summary>
        /// <value>Deprecated: use &#39;prune-backups&#39; instead. Maximal number of backup files per guest system.</value>
        [DataMember(Name = "maxfiles", EmitDefaultValue = false)]
        public Int64 Maxfiles { get; set; }

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

        /// <summary>
        /// Only run if executed on this node.
        /// </summary>
        /// <value>Only run if executed on this node.</value>
        [DataMember(Name = "node", EmitDefaultValue = false)]
        public string Node { get; set; }

        /// <summary>
        /// Template string for generating notes for the backup(s). It can contain variables which will be replaced by their values. Currently supported are {{cluster}}, {{guestname}}, {{node}}, and {{vmid}}, but more might be added in the future. Needs to be a single line, newline and backslash need to be escaped as &#39;\\n&#39; and &#39;\\\\&#39; respectively.
        /// </summary>
        /// <value>Template string for generating notes for the backup(s). It can contain variables which will be replaced by their values. Currently supported are {{cluster}}, {{guestname}}, {{node}}, and {{vmid}}, but more might be added in the future. Needs to be a single line, newline and backslash need to be escaped as &#39;\\n&#39; and &#39;\\\\&#39; respectively.</value>
        [DataMember(Name = "notes-template", EmitDefaultValue = false)]
        public string NotesTemplate { get; set; }

        /// <summary>
        /// Determine which notification system to use. If set to &#39;legacy-sendmail&#39;, vzdump will consider the mailto/mailnotification parameters and send emails to the specified address(es) via the &#39;sendmail&#39; command. If set to &#39;notification-system&#39;, a notification will be sent via PVE&#39;s notification system, and the mailto and mailnotification will be ignored. If set to &#39;auto&#39; (default setting), an email will be sent if mailto is set, and the notification system will be used if not.
        /// </summary>
        /// <value>Determine which notification system to use. If set to &#39;legacy-sendmail&#39;, vzdump will consider the mailto/mailnotification parameters and send emails to the specified address(es) via the &#39;sendmail&#39; command. If set to &#39;notification-system&#39;, a notification will be sent via PVE&#39;s notification system, and the mailto and mailnotification will be ignored. If set to &#39;auto&#39; (default setting), an email will be sent if mailto is set, and the notification system will be used if not.</value>
        [DataMember(Name = "notification-mode", EmitDefaultValue = false)]
        public string NotificationMode { get; set; }

        /// <summary>
        /// PBS mode used to detect file changes and switch encoding format for container backups.
        /// </summary>
        /// <value>PBS mode used to detect file changes and switch encoding format for container backups.</value>
        [DataMember(Name = "pbs-change-detection-mode", EmitDefaultValue = false)]
        public string PbsChangeDetectionMode { get; set; }

        /// <summary>
        /// Other performance-related settings.
        /// </summary>
        /// <value>Other performance-related settings.</value>
        [DataMember(Name = "performance", EmitDefaultValue = false)]
        public string Performance { get; set; }

        /// <summary>
        /// Use pigz instead of gzip when N&gt;0. N&#x3D;1 uses half of cores, N&gt;1 uses N as thread count.
        /// </summary>
        /// <value>Use pigz instead of gzip when N&gt;0. N&#x3D;1 uses half of cores, N&gt;1 uses N as thread count.</value>
        [DataMember(Name = "pigz", EmitDefaultValue = false)]
        public Int64 Pigz { get; set; }

        /// <summary>
        /// Backup all known guest systems included in the specified pool.
        /// </summary>
        /// <value>Backup all known guest systems included in the specified pool.</value>
        [DataMember(Name = "pool", EmitDefaultValue = false)]
        public string Pool { get; set; }

        /// <summary>
        /// If true, mark backup(s) as protected.
        /// </summary>
        /// <value>If true, mark backup(s) as protected.</value>
        [DataMember(Name = "protected", EmitDefaultValue = false)]
        public Int64 Protected { get; set; }

        /// <summary>
        /// Use these retention options instead of those from the storage configuration.
        /// </summary>
        /// <value>Use these retention options instead of those from the storage configuration.</value>
        [DataMember(Name = "prune-backups", EmitDefaultValue = false)]
        public string PruneBackups { get; set; }

        /// <summary>
        /// Be quiet.
        /// </summary>
        /// <value>Be quiet.</value>
        [DataMember(Name = "quiet", EmitDefaultValue = false)]
        public Int64 Quiet { get; set; }

        /// <summary>
        /// Prune older backups according to &#39;prune-backups&#39;.
        /// </summary>
        /// <value>Prune older backups according to &#39;prune-backups&#39;.</value>
        [DataMember(Name = "remove", EmitDefaultValue = false)]
        public Int64 Remove { get; set; }

        /// <summary>
        /// Use specified hook script.
        /// </summary>
        /// <value>Use specified hook script.</value>
        [DataMember(Name = "script", EmitDefaultValue = false)]
        public string Script { get; set; }

        /// <summary>
        /// Exclude temporary files and logs.
        /// </summary>
        /// <value>Exclude temporary files and logs.</value>
        [DataMember(Name = "stdexcludes", EmitDefaultValue = false)]
        public Int64 Stdexcludes { get; set; }

        /// <summary>
        /// Stop running backup jobs on this host.
        /// </summary>
        /// <value>Stop running backup jobs on this host.</value>
        [DataMember(Name = "stop", EmitDefaultValue = false)]
        public Int64 Stop { get; set; }

        /// <summary>
        /// Maximal time to wait until a guest system is stopped (minutes).
        /// </summary>
        /// <value>Maximal time to wait until a guest system is stopped (minutes).</value>
        [DataMember(Name = "stopwait", EmitDefaultValue = false)]
        public Int64 Stopwait { get; set; }

        /// <summary>
        /// Store resulting file to this storage.
        /// </summary>
        /// <value>Store resulting file to this storage.</value>
        [DataMember(Name = "storage", EmitDefaultValue = false)]
        public string Storage { get; set; }

        /// <summary>
        /// Store temporary files to specified directory.
        /// </summary>
        /// <value>Store temporary files to specified directory.</value>
        [DataMember(Name = "tmpdir", EmitDefaultValue = false)]
        public string Tmpdir { get; set; }

        /// <summary>
        /// The ID of the guest system you want to backup.
        /// </summary>
        /// <value>The ID of the guest system you want to backup.</value>
        [DataMember(Name = "vmid", EmitDefaultValue = false)]
        public string Vmid { get; set; }

        /// <summary>
        /// Zstd threads. N&#x3D;0 uses half of the available cores, if N is set to a value bigger than 0, N is used as thread count.
        /// </summary>
        /// <value>Zstd threads. N&#x3D;0 uses half of the available cores, if N is set to a value bigger than 0, N is used as thread count.</value>
        [DataMember(Name = "zstd", EmitDefaultValue = false)]
        public Int64 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 GetNodesSingleVzdumpDefaults200ResponseData {\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("  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("  Node: ").Append(Node).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("  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;
        }
    }

}
