/*
 * 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>
    /// GetClusterJobsRealmsync200ResponseDataInner
    /// </summary>
    [DataContract(Name = "getClusterJobsRealmsync_200_response_data_inner")]
    public partial class GetClusterJobsRealmsync200ResponseDataInner : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetClusterJobsRealmsync200ResponseDataInner" /> class.
        /// </summary>
        /// <param name="comment">A comment for the job..</param>
        /// <param name="enabled">If the job is enabled or not..</param>
        /// <param name="id">The ID of the entry..</param>
        /// <param name="lastRun">Last execution time of the job in seconds since the beginning of the UNIX epoch.</param>
        /// <param name="nextRun">Next planned execution time of the job in seconds since the beginning of the UNIX epoch..</param>
        /// <param name="realm">Authentication domain ID.</param>
        /// <param name="removeVanished">A semicolon-separated list of things to remove when they or the user vanishes during a sync. The following values are possible: &#39;entry&#39; removes the user/group when not returned from the sync. &#39;properties&#39; removes the set properties on existing user/group that do not appear in the source (even custom ones). &#39;acl&#39; removes acls when the user/group is not returned from the sync. Instead of a list it also can be &#39;none&#39; (the default)..</param>
        /// <param name="schedule">The configured sync schedule..</param>
        /// <param name="scope">Select what to sync..</param>
        public GetClusterJobsRealmsync200ResponseDataInner(string comment = default(string), Int64 enabled = default(Int64), string id = default(string), Int64 lastRun = default(Int64), Int64 nextRun = default(Int64), string realm = default(string), string removeVanished = default(string), string schedule = default(string), string scope = default(string))
        {
            this.Comment = comment;
            this.Enabled = enabled;
            this.Id = id;
            this.LastRun = lastRun;
            this.NextRun = nextRun;
            this.Realm = realm;
            this.RemoveVanished = removeVanished;
            this.Schedule = schedule;
            this.Scope = scope;
        }

        /// <summary>
        /// A comment for the job.
        /// </summary>
        /// <value>A comment for the job.</value>
        [DataMember(Name = "comment", EmitDefaultValue = false)]
        public string Comment { get; set; }

        /// <summary>
        /// If the job is enabled or not.
        /// </summary>
        /// <value>If the job is enabled or not.</value>
        [DataMember(Name = "enabled", EmitDefaultValue = false)]
        public Int64 Enabled { get; set; }

        /// <summary>
        /// The ID of the entry.
        /// </summary>
        /// <value>The ID of the entry.</value>
        [DataMember(Name = "id", EmitDefaultValue = false)]
        public string Id { get; set; }

        /// <summary>
        /// Last execution time of the job in seconds since the beginning of the UNIX epoch
        /// </summary>
        /// <value>Last execution time of the job in seconds since the beginning of the UNIX epoch</value>
        [DataMember(Name = "last-run", EmitDefaultValue = false)]
        public Int64 LastRun { get; set; }

        /// <summary>
        /// Next planned execution time of the job in seconds since the beginning of the UNIX epoch.
        /// </summary>
        /// <value>Next planned execution time of the job in seconds since the beginning of the UNIX epoch.</value>
        [DataMember(Name = "next-run", EmitDefaultValue = false)]
        public Int64 NextRun { get; set; }

        /// <summary>
        /// Authentication domain ID
        /// </summary>
        /// <value>Authentication domain ID</value>
        [DataMember(Name = "realm", EmitDefaultValue = false)]
        public string Realm { get; set; }

        /// <summary>
        /// A semicolon-separated list of things to remove when they or the user vanishes during a sync. The following values are possible: &#39;entry&#39; removes the user/group when not returned from the sync. &#39;properties&#39; removes the set properties on existing user/group that do not appear in the source (even custom ones). &#39;acl&#39; removes acls when the user/group is not returned from the sync. Instead of a list it also can be &#39;none&#39; (the default).
        /// </summary>
        /// <value>A semicolon-separated list of things to remove when they or the user vanishes during a sync. The following values are possible: &#39;entry&#39; removes the user/group when not returned from the sync. &#39;properties&#39; removes the set properties on existing user/group that do not appear in the source (even custom ones). &#39;acl&#39; removes acls when the user/group is not returned from the sync. Instead of a list it also can be &#39;none&#39; (the default).</value>
        [DataMember(Name = "remove-vanished", EmitDefaultValue = false)]
        public string RemoveVanished { get; set; }

        /// <summary>
        /// The configured sync schedule.
        /// </summary>
        /// <value>The configured sync schedule.</value>
        [DataMember(Name = "schedule", EmitDefaultValue = false)]
        public string Schedule { get; set; }

        /// <summary>
        /// Select what to sync.
        /// </summary>
        /// <value>Select what to sync.</value>
        [DataMember(Name = "scope", EmitDefaultValue = false)]
        public string Scope { 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 GetClusterJobsRealmsync200ResponseDataInner {\n");
            sb.Append("  Comment: ").Append(Comment).Append("\n");
            sb.Append("  Enabled: ").Append(Enabled).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  LastRun: ").Append(LastRun).Append("\n");
            sb.Append("  NextRun: ").Append(NextRun).Append("\n");
            sb.Append("  Realm: ").Append(Realm).Append("\n");
            sb.Append("  RemoveVanished: ").Append(RemoveVanished).Append("\n");
            sb.Append("  Schedule: ").Append(Schedule).Append("\n");
            sb.Append("  Scope: ").Append(Scope).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;
        }
    }

}
