/*
 * 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>
    /// GetNodesSingleCephPoolSingleStatus200ResponseData
    /// </summary>
    [DataContract(Name = "getNodesSingleCephPoolSingleStatus_200_response_data")]
    public partial class GetNodesSingleCephPoolSingleStatus200ResponseData : IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetNodesSingleCephPoolSingleStatus200ResponseData" /> class.
        /// </summary>
        /// <param name="application">The application of the pool..</param>
        /// <param name="applicationList">applicationList.</param>
        /// <param name="autoscaleStatus">autoscaleStatus.</param>
        /// <param name="crushRule">The rule to use for mapping object placement in the cluster..</param>
        /// <param name="fastRead">fastRead.</param>
        /// <param name="hashpspool">hashpspool.</param>
        /// <param name="id">id.</param>
        /// <param name="minSize">Minimum number of replicas per object.</param>
        /// <param name="name">The name of the pool. It must be unique..</param>
        /// <param name="nodeepScrub">nodeepScrub.</param>
        /// <param name="nodelete">nodelete.</param>
        /// <param name="nopgchange">nopgchange.</param>
        /// <param name="noscrub">noscrub.</param>
        /// <param name="nosizechange">nosizechange.</param>
        /// <param name="pgAutoscaleMode">The automatic PG scaling mode of the pool..</param>
        /// <param name="pgNum">Number of placement groups..</param>
        /// <param name="pgNumMin">Minimal number of placement groups..</param>
        /// <param name="pgpNum">pgpNum.</param>
        /// <param name="size">Number of replicas per object.</param>
        /// <param name="statistics">statistics.</param>
        /// <param name="targetSize">The estimated target size of the pool for the PG autoscaler..</param>
        /// <param name="targetSizeRatio">The estimated target ratio of the pool for the PG autoscaler..</param>
        /// <param name="useGmtHitset">useGmtHitset.</param>
        /// <param name="writeFadviseDontneed">writeFadviseDontneed.</param>
        public GetNodesSingleCephPoolSingleStatus200ResponseData(string application = default(string), List<string> applicationList = default(List<string>), Object autoscaleStatus = default(Object), string crushRule = default(string), Int64 fastRead = default(Int64), Int64 hashpspool = default(Int64), Int64 id = default(Int64), Int64 minSize = default(Int64), string name = default(string), Int64 nodeepScrub = default(Int64), Int64 nodelete = default(Int64), Int64 nopgchange = default(Int64), Int64 noscrub = default(Int64), Int64 nosizechange = default(Int64), string pgAutoscaleMode = default(string), Int64 pgNum = default(Int64), Int64 pgNumMin = default(Int64), Int64 pgpNum = default(Int64), Int64 size = default(Int64), Object statistics = default(Object), string targetSize = default(string), decimal targetSizeRatio = default(decimal), Int64 useGmtHitset = default(Int64), Int64 writeFadviseDontneed = default(Int64))
        {
            this.Application = application;
            this.ApplicationList = applicationList;
            this.AutoscaleStatus = autoscaleStatus;
            this.CrushRule = crushRule;
            this.FastRead = fastRead;
            this.Hashpspool = hashpspool;
            this.Id = id;
            this.MinSize = minSize;
            this.Name = name;
            this.NodeepScrub = nodeepScrub;
            this.Nodelete = nodelete;
            this.Nopgchange = nopgchange;
            this.Noscrub = noscrub;
            this.Nosizechange = nosizechange;
            this.PgAutoscaleMode = pgAutoscaleMode;
            this.PgNum = pgNum;
            this.PgNumMin = pgNumMin;
            this.PgpNum = pgpNum;
            this.Size = size;
            this.Statistics = statistics;
            this.TargetSize = targetSize;
            this.TargetSizeRatio = targetSizeRatio;
            this.UseGmtHitset = useGmtHitset;
            this.WriteFadviseDontneed = writeFadviseDontneed;
        }

        /// <summary>
        /// The application of the pool.
        /// </summary>
        /// <value>The application of the pool.</value>
        [DataMember(Name = "application", EmitDefaultValue = false)]
        public string Application { get; set; }

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

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

        /// <summary>
        /// The rule to use for mapping object placement in the cluster.
        /// </summary>
        /// <value>The rule to use for mapping object placement in the cluster.</value>
        [DataMember(Name = "crush_rule", EmitDefaultValue = false)]
        public string CrushRule { get; set; }

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

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

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

        /// <summary>
        /// Minimum number of replicas per object
        /// </summary>
        /// <value>Minimum number of replicas per object</value>
        [DataMember(Name = "min_size", EmitDefaultValue = false)]
        public Int64 MinSize { get; set; }

        /// <summary>
        /// The name of the pool. It must be unique.
        /// </summary>
        /// <value>The name of the pool. It must be unique.</value>
        [DataMember(Name = "name", EmitDefaultValue = false)]
        public string Name { get; set; }

        /// <summary>
        /// Gets or Sets NodeepScrub
        /// </summary>
        [DataMember(Name = "nodeep-scrub", EmitDefaultValue = false)]
        public Int64 NodeepScrub { get; set; }

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

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

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

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

        /// <summary>
        /// The automatic PG scaling mode of the pool.
        /// </summary>
        /// <value>The automatic PG scaling mode of the pool.</value>
        [DataMember(Name = "pg_autoscale_mode", EmitDefaultValue = false)]
        public string PgAutoscaleMode { get; set; }

        /// <summary>
        /// Number of placement groups.
        /// </summary>
        /// <value>Number of placement groups.</value>
        [DataMember(Name = "pg_num", EmitDefaultValue = false)]
        public Int64 PgNum { get; set; }

        /// <summary>
        /// Minimal number of placement groups.
        /// </summary>
        /// <value>Minimal number of placement groups.</value>
        [DataMember(Name = "pg_num_min", EmitDefaultValue = false)]
        public Int64 PgNumMin { get; set; }

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

        /// <summary>
        /// Number of replicas per object
        /// </summary>
        /// <value>Number of replicas per object</value>
        [DataMember(Name = "size", EmitDefaultValue = false)]
        public Int64 Size { get; set; }

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

        /// <summary>
        /// The estimated target size of the pool for the PG autoscaler.
        /// </summary>
        /// <value>The estimated target size of the pool for the PG autoscaler.</value>
        [DataMember(Name = "target_size", EmitDefaultValue = false)]
        public string TargetSize { get; set; }

        /// <summary>
        /// The estimated target ratio of the pool for the PG autoscaler.
        /// </summary>
        /// <value>The estimated target ratio of the pool for the PG autoscaler.</value>
        [DataMember(Name = "target_size_ratio", EmitDefaultValue = false)]
        public decimal TargetSizeRatio { get; set; }

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

        /// <summary>
        /// Gets or Sets WriteFadviseDontneed
        /// </summary>
        [DataMember(Name = "write_fadvise_dontneed", EmitDefaultValue = false)]
        public Int64 WriteFadviseDontneed { 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 GetNodesSingleCephPoolSingleStatus200ResponseData {\n");
            sb.Append("  Application: ").Append(Application).Append("\n");
            sb.Append("  ApplicationList: ").Append(ApplicationList).Append("\n");
            sb.Append("  AutoscaleStatus: ").Append(AutoscaleStatus).Append("\n");
            sb.Append("  CrushRule: ").Append(CrushRule).Append("\n");
            sb.Append("  FastRead: ").Append(FastRead).Append("\n");
            sb.Append("  Hashpspool: ").Append(Hashpspool).Append("\n");
            sb.Append("  Id: ").Append(Id).Append("\n");
            sb.Append("  MinSize: ").Append(MinSize).Append("\n");
            sb.Append("  Name: ").Append(Name).Append("\n");
            sb.Append("  NodeepScrub: ").Append(NodeepScrub).Append("\n");
            sb.Append("  Nodelete: ").Append(Nodelete).Append("\n");
            sb.Append("  Nopgchange: ").Append(Nopgchange).Append("\n");
            sb.Append("  Noscrub: ").Append(Noscrub).Append("\n");
            sb.Append("  Nosizechange: ").Append(Nosizechange).Append("\n");
            sb.Append("  PgAutoscaleMode: ").Append(PgAutoscaleMode).Append("\n");
            sb.Append("  PgNum: ").Append(PgNum).Append("\n");
            sb.Append("  PgNumMin: ").Append(PgNumMin).Append("\n");
            sb.Append("  PgpNum: ").Append(PgpNum).Append("\n");
            sb.Append("  Size: ").Append(Size).Append("\n");
            sb.Append("  Statistics: ").Append(Statistics).Append("\n");
            sb.Append("  TargetSize: ").Append(TargetSize).Append("\n");
            sb.Append("  TargetSizeRatio: ").Append(TargetSizeRatio).Append("\n");
            sb.Append("  UseGmtHitset: ").Append(UseGmtHitset).Append("\n");
            sb.Append("  WriteFadviseDontneed: ").Append(WriteFadviseDontneed).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;
        }
    }

}
