/* 
 * DocuSign REST API
 *
 * The DocuSign REST API provides you with a powerful, convenient, and simple Web services API for interacting with DocuSign.
 *
 * OpenAPI spec version: v2.1
 * Contact: devcenter@docusign.com
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 */

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.ComponentModel.DataAnnotations;
using SwaggerDateConverter = DocuSign.eSign.Client.SwaggerDateConverter;

namespace DocuSign.eSign.Model
{
    /// <summary>
    /// SmartSectionDisplaySettings
    /// </summary>
    [DataContract]
    public partial class SmartSectionDisplaySettings :  IEquatable<SmartSectionDisplaySettings>, IValidatableObject
    {
        public SmartSectionDisplaySettings()
        {
            // Empty Constructor
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SmartSectionDisplaySettings" /> class.
        /// </summary>
        /// <param name="CellStyle">CellStyle.</param>
        /// <param name="CollapsibleSettings">CollapsibleSettings.</param>
        /// <param name="Display">Display.</param>
        /// <param name="DisplayLabel">DisplayLabel.</param>
        /// <param name="DisplayOrder">DisplayOrder.</param>
        /// <param name="DisplayPageNumber">DisplayPageNumber.</param>
        /// <param name="HideLabelWhenOpened">HideLabelWhenOpened.</param>
        /// <param name="InlineOuterStyle">InlineOuterStyle.</param>
        /// <param name="LabelWhenOpened">LabelWhenOpened.</param>
        /// <param name="PreLabel">PreLabel.</param>
        /// <param name="ScrollToTopWhenOpened">ScrollToTopWhenOpened.</param>
        /// <param name="TableStyle">TableStyle.</param>
        public SmartSectionDisplaySettings(string CellStyle = default(string), SmartSectionCollapsibleDisplaySettings CollapsibleSettings = default(SmartSectionCollapsibleDisplaySettings), string Display = default(string), string DisplayLabel = default(string), int? DisplayOrder = default(int?), int? DisplayPageNumber = default(int?), bool? HideLabelWhenOpened = default(bool?), string InlineOuterStyle = default(string), string LabelWhenOpened = default(string), string PreLabel = default(string), bool? ScrollToTopWhenOpened = default(bool?), string TableStyle = default(string))
        {
            this.CellStyle = CellStyle;
            this.CollapsibleSettings = CollapsibleSettings;
            this.Display = Display;
            this.DisplayLabel = DisplayLabel;
            this.DisplayOrder = DisplayOrder;
            this.DisplayPageNumber = DisplayPageNumber;
            this.HideLabelWhenOpened = HideLabelWhenOpened;
            this.InlineOuterStyle = InlineOuterStyle;
            this.LabelWhenOpened = LabelWhenOpened;
            this.PreLabel = PreLabel;
            this.ScrollToTopWhenOpened = ScrollToTopWhenOpened;
            this.TableStyle = TableStyle;
        }
        
        /// <summary>
        /// Gets or Sets CellStyle
        /// </summary>
        [DataMember(Name="cellStyle", EmitDefaultValue=false)]
        public string CellStyle { get; set; }
        /// <summary>
        /// Gets or Sets CollapsibleSettings
        /// </summary>
        [DataMember(Name="collapsibleSettings", EmitDefaultValue=false)]
        public SmartSectionCollapsibleDisplaySettings CollapsibleSettings { get; set; }
        /// <summary>
        /// Gets or Sets Display
        /// </summary>
        [DataMember(Name="display", EmitDefaultValue=false)]
        public string Display { get; set; }
        /// <summary>
        /// Gets or Sets DisplayLabel
        /// </summary>
        [DataMember(Name="displayLabel", EmitDefaultValue=false)]
        public string DisplayLabel { get; set; }
        /// <summary>
        /// Gets or Sets DisplayOrder
        /// </summary>
        [DataMember(Name="displayOrder", EmitDefaultValue=false)]
        public int? DisplayOrder { get; set; }
        /// <summary>
        /// Gets or Sets DisplayPageNumber
        /// </summary>
        [DataMember(Name="displayPageNumber", EmitDefaultValue=false)]
        public int? DisplayPageNumber { get; set; }
        /// <summary>
        /// Gets or Sets HideLabelWhenOpened
        /// </summary>
        [DataMember(Name="hideLabelWhenOpened", EmitDefaultValue=false)]
        public bool? HideLabelWhenOpened { get; set; }
        /// <summary>
        /// Gets or Sets InlineOuterStyle
        /// </summary>
        [DataMember(Name="inlineOuterStyle", EmitDefaultValue=false)]
        public string InlineOuterStyle { get; set; }
        /// <summary>
        /// Gets or Sets LabelWhenOpened
        /// </summary>
        [DataMember(Name="labelWhenOpened", EmitDefaultValue=false)]
        public string LabelWhenOpened { get; set; }
        /// <summary>
        /// Gets or Sets PreLabel
        /// </summary>
        [DataMember(Name="preLabel", EmitDefaultValue=false)]
        public string PreLabel { get; set; }
        /// <summary>
        /// Gets or Sets ScrollToTopWhenOpened
        /// </summary>
        [DataMember(Name="scrollToTopWhenOpened", EmitDefaultValue=false)]
        public bool? ScrollToTopWhenOpened { get; set; }
        /// <summary>
        /// Gets or Sets TableStyle
        /// </summary>
        [DataMember(Name="tableStyle", EmitDefaultValue=false)]
        public string TableStyle { get; set; }
        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            var sb = new StringBuilder();
            sb.Append("class SmartSectionDisplaySettings {\n");
            sb.Append("  CellStyle: ").Append(CellStyle).Append("\n");
            sb.Append("  CollapsibleSettings: ").Append(CollapsibleSettings).Append("\n");
            sb.Append("  Display: ").Append(Display).Append("\n");
            sb.Append("  DisplayLabel: ").Append(DisplayLabel).Append("\n");
            sb.Append("  DisplayOrder: ").Append(DisplayOrder).Append("\n");
            sb.Append("  DisplayPageNumber: ").Append(DisplayPageNumber).Append("\n");
            sb.Append("  HideLabelWhenOpened: ").Append(HideLabelWhenOpened).Append("\n");
            sb.Append("  InlineOuterStyle: ").Append(InlineOuterStyle).Append("\n");
            sb.Append("  LabelWhenOpened: ").Append(LabelWhenOpened).Append("\n");
            sb.Append("  PreLabel: ").Append(PreLabel).Append("\n");
            sb.Append("  ScrollToTopWhenOpened: ").Append(ScrollToTopWhenOpened).Append("\n");
            sb.Append("  TableStyle: ").Append(TableStyle).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 string ToJson()
        {
            return JsonConvert.SerializeObject(this, Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="obj">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object obj)
        {
            // credit: http://stackoverflow.com/a/10454552/677735
            return this.Equals(obj as SmartSectionDisplaySettings);
        }

        /// <summary>
        /// Returns true if SmartSectionDisplaySettings instances are equal
        /// </summary>
        /// <param name="other">Instance of SmartSectionDisplaySettings to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(SmartSectionDisplaySettings other)
        {
            // credit: http://stackoverflow.com/a/10454552/677735
            if (other == null)
                return false;

            return 
                (
                    this.CellStyle == other.CellStyle ||
                    this.CellStyle != null &&
                    this.CellStyle.Equals(other.CellStyle)
                ) && 
                (
                    this.CollapsibleSettings == other.CollapsibleSettings ||
                    this.CollapsibleSettings != null &&
                    this.CollapsibleSettings.Equals(other.CollapsibleSettings)
                ) && 
                (
                    this.Display == other.Display ||
                    this.Display != null &&
                    this.Display.Equals(other.Display)
                ) && 
                (
                    this.DisplayLabel == other.DisplayLabel ||
                    this.DisplayLabel != null &&
                    this.DisplayLabel.Equals(other.DisplayLabel)
                ) && 
                (
                    this.DisplayOrder == other.DisplayOrder ||
                    this.DisplayOrder != null &&
                    this.DisplayOrder.Equals(other.DisplayOrder)
                ) && 
                (
                    this.DisplayPageNumber == other.DisplayPageNumber ||
                    this.DisplayPageNumber != null &&
                    this.DisplayPageNumber.Equals(other.DisplayPageNumber)
                ) && 
                (
                    this.HideLabelWhenOpened == other.HideLabelWhenOpened ||
                    this.HideLabelWhenOpened != null &&
                    this.HideLabelWhenOpened.Equals(other.HideLabelWhenOpened)
                ) && 
                (
                    this.InlineOuterStyle == other.InlineOuterStyle ||
                    this.InlineOuterStyle != null &&
                    this.InlineOuterStyle.Equals(other.InlineOuterStyle)
                ) && 
                (
                    this.LabelWhenOpened == other.LabelWhenOpened ||
                    this.LabelWhenOpened != null &&
                    this.LabelWhenOpened.Equals(other.LabelWhenOpened)
                ) && 
                (
                    this.PreLabel == other.PreLabel ||
                    this.PreLabel != null &&
                    this.PreLabel.Equals(other.PreLabel)
                ) && 
                (
                    this.ScrollToTopWhenOpened == other.ScrollToTopWhenOpened ||
                    this.ScrollToTopWhenOpened != null &&
                    this.ScrollToTopWhenOpened.Equals(other.ScrollToTopWhenOpened)
                ) && 
                (
                    this.TableStyle == other.TableStyle ||
                    this.TableStyle != null &&
                    this.TableStyle.Equals(other.TableStyle)
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            // credit: http://stackoverflow.com/a/263416/677735
            unchecked // Overflow is fine, just wrap
            {
                int hash = 41;
                // Suitable nullity checks etc, of course :)
                if (this.CellStyle != null)
                    hash = hash * 59 + this.CellStyle.GetHashCode();
                if (this.CollapsibleSettings != null)
                    hash = hash * 59 + this.CollapsibleSettings.GetHashCode();
                if (this.Display != null)
                    hash = hash * 59 + this.Display.GetHashCode();
                if (this.DisplayLabel != null)
                    hash = hash * 59 + this.DisplayLabel.GetHashCode();
                if (this.DisplayOrder != null)
                    hash = hash * 59 + this.DisplayOrder.GetHashCode();
                if (this.DisplayPageNumber != null)
                    hash = hash * 59 + this.DisplayPageNumber.GetHashCode();
                if (this.HideLabelWhenOpened != null)
                    hash = hash * 59 + this.HideLabelWhenOpened.GetHashCode();
                if (this.InlineOuterStyle != null)
                    hash = hash * 59 + this.InlineOuterStyle.GetHashCode();
                if (this.LabelWhenOpened != null)
                    hash = hash * 59 + this.LabelWhenOpened.GetHashCode();
                if (this.PreLabel != null)
                    hash = hash * 59 + this.PreLabel.GetHashCode();
                if (this.ScrollToTopWhenOpened != null)
                    hash = hash * 59 + this.ScrollToTopWhenOpened.GetHashCode();
                if (this.TableStyle != null)
                    hash = hash * 59 + this.TableStyle.GetHashCode();
                return hash;
            }
        }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        { 
            yield break;
        }
    }
}
