// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>

namespace k8s.Models
{
    using Newtonsoft.Json;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;

    /// <summary>
    /// StatefulSetStatus represents the current state of a StatefulSet.
    /// </summary>
    public partial class V1StatefulSetStatus
    {
        /// <summary>
        /// Initializes a new instance of the V1StatefulSetStatus class.
        /// </summary>
        public V1StatefulSetStatus()
        {
            CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the V1StatefulSetStatus class.
        /// </summary>
        /// <param name="replicas">replicas is the number of Pods created by
        /// the StatefulSet controller.</param>
        /// <param name="collisionCount">collisionCount is the count of hash
        /// collisions for the StatefulSet. The StatefulSet controller uses
        /// this field as a collision avoidance mechanism when it needs to
        /// create the name for the newest ControllerRevision.</param>
        /// <param name="conditions">Represents the latest available
        /// observations of a statefulset's current state.</param>
        /// <param name="currentReplicas">currentReplicas is the number of Pods
        /// created by the StatefulSet controller from the StatefulSet version
        /// indicated by currentRevision.</param>
        /// <param name="currentRevision">currentRevision, if not empty,
        /// indicates the version of the StatefulSet used to generate Pods in
        /// the sequence [0,currentReplicas).</param>
        /// <param name="observedGeneration">observedGeneration is the most
        /// recent generation observed for this StatefulSet. It corresponds to
        /// the StatefulSet's generation, which is updated on mutation by the
        /// API Server.</param>
        /// <param name="readyReplicas">readyReplicas is the number of Pods
        /// created by the StatefulSet controller that have a Ready
        /// Condition.</param>
        /// <param name="updateRevision">updateRevision, if not empty,
        /// indicates the version of the StatefulSet used to generate Pods in
        /// the sequence [replicas-updatedReplicas,replicas)</param>
        /// <param name="updatedReplicas">updatedReplicas is the number of Pods
        /// created by the StatefulSet controller from the StatefulSet version
        /// indicated by updateRevision.</param>
        public V1StatefulSetStatus(int replicas, int? collisionCount = default(int?), IList<V1StatefulSetCondition> conditions = default(IList<V1StatefulSetCondition>), int? currentReplicas = default(int?), string currentRevision = default(string), long? observedGeneration = default(long?), int? readyReplicas = default(int?), string updateRevision = default(string), int? updatedReplicas = default(int?))
        {
            CollisionCount = collisionCount;
            Conditions = conditions;
            CurrentReplicas = currentReplicas;
            CurrentRevision = currentRevision;
            ObservedGeneration = observedGeneration;
            ReadyReplicas = readyReplicas;
            Replicas = replicas;
            UpdateRevision = updateRevision;
            UpdatedReplicas = updatedReplicas;
            CustomInit();
        }

        /// <summary>
        /// An initialization method that performs custom operations like setting defaults
        /// </summary>
        partial void CustomInit();

        /// <summary>
        /// Gets or sets collisionCount is the count of hash collisions for the
        /// StatefulSet. The StatefulSet controller uses this field as a
        /// collision avoidance mechanism when it needs to create the name for
        /// the newest ControllerRevision.
        /// </summary>
        [JsonProperty(PropertyName = "collisionCount")]
        public int? CollisionCount { get; set; }

        /// <summary>
        /// Gets or sets represents the latest available observations of a
        /// statefulset's current state.
        /// </summary>
        [JsonProperty(PropertyName = "conditions")]
        public IList<V1StatefulSetCondition> Conditions { get; set; }

        /// <summary>
        /// Gets or sets currentReplicas is the number of Pods created by the
        /// StatefulSet controller from the StatefulSet version indicated by
        /// currentRevision.
        /// </summary>
        [JsonProperty(PropertyName = "currentReplicas")]
        public int? CurrentReplicas { get; set; }

        /// <summary>
        /// Gets or sets currentRevision, if not empty, indicates the version
        /// of the StatefulSet used to generate Pods in the sequence
        /// [0,currentReplicas).
        /// </summary>
        [JsonProperty(PropertyName = "currentRevision")]
        public string CurrentRevision { get; set; }

        /// <summary>
        /// Gets or sets observedGeneration is the most recent generation
        /// observed for this StatefulSet. It corresponds to the StatefulSet's
        /// generation, which is updated on mutation by the API Server.
        /// </summary>
        [JsonProperty(PropertyName = "observedGeneration")]
        public long? ObservedGeneration { get; set; }

        /// <summary>
        /// Gets or sets readyReplicas is the number of Pods created by the
        /// StatefulSet controller that have a Ready Condition.
        /// </summary>
        [JsonProperty(PropertyName = "readyReplicas")]
        public int? ReadyReplicas { get; set; }

        /// <summary>
        /// Gets or sets replicas is the number of Pods created by the
        /// StatefulSet controller.
        /// </summary>
        [JsonProperty(PropertyName = "replicas")]
        public int Replicas { get; set; }

        /// <summary>
        /// Gets or sets updateRevision, if not empty, indicates the version of
        /// the StatefulSet used to generate Pods in the sequence
        /// [replicas-updatedReplicas,replicas)
        /// </summary>
        [JsonProperty(PropertyName = "updateRevision")]
        public string UpdateRevision { get; set; }

        /// <summary>
        /// Gets or sets updatedReplicas is the number of Pods created by the
        /// StatefulSet controller from the StatefulSet version indicated by
        /// updateRevision.
        /// </summary>
        [JsonProperty(PropertyName = "updatedReplicas")]
        public int? UpdatedReplicas { get; set; }

        /// <summary>
        /// Validate the object.
        /// </summary>
        /// <exception cref="Microsoft.Rest.ValidationException">
        /// Thrown if validation fails
        /// </exception>
        public virtual void Validate()
        {
            if (Conditions != null)
            {
                foreach (var element in Conditions)
                {
                    if (element != null)
                    {
                        element.Validate();
                    }
                }
            }
        }
    }
}
