<gh_stars>0/*
 * DOJAH APIs
 *
 * Use Dojah to verify, onboard and manage user identity across Africa!
 *
 * The version of the OpenAPI document: 1.0.0
 * Generated by: https://konfigthis.com
 */


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 = Dojah.Net.Client.OpenAPIDateConverter;

namespace Dojah.Net.Model
{
    /// <summary>
    /// GetAccountAnalysisResponseEntityAccountBreakdown
    /// </summary>
    [DataContract(Name = "GetAccountAnalysisResponse_entity_accountBreakdown")]
    public partial class GetAccountAnalysisResponseEntityAccountBreakdown : IEquatable<GetAccountAnalysisResponseEntityAccountBreakdown>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="GetAccountAnalysisResponseEntityAccountBreakdown" /> class.
        /// </summary>
        /// <param name="totalCreditEntry">totalCreditEntry.</param>
        /// <param name="totalDebitMade">totalDebitMade.</param>
        /// <param name="averageMonthlyBalance">averageMonthlyBalance.</param>
        /// <param name="averageMonthlyCredits">averageMonthlyCredits.</param>
        /// <param name="averageMonthlyDebits">averageMonthlyDebits.</param>
        /// <param name="averageWeeklyBalance">averageWeeklyBalance.</param>
        /// <param name="averageWeeklyCredits">averageWeeklyCredits.</param>
        /// <param name="averageWeeklyDebits">averageWeeklyDebits.</param>
        /// <param name="closingBalance">closingBalance.</param>
        /// <param name="firstDateInStatement">firstDateInStatement.</param>
        /// <param name="lastDateInStatement">lastDateInStatement.</param>
        /// <param name="numberOfTransactingMonths">numberOfTransactingMonths.</param>
        /// <param name="periodInStatement">periodInStatement.</param>
        /// <param name="yearInStatement">yearInStatement.</param>
        public GetAccountAnalysisResponseEntityAccountBreakdown(decimal totalCreditEntry = default(decimal), decimal totalDebitMade = default(decimal), decimal averageMonthlyBalance = default(decimal), decimal averageMonthlyCredits = default(decimal), decimal averageMonthlyDebits = default(decimal), decimal averageWeeklyBalance = default(decimal), decimal averageWeeklyCredits = default(decimal), decimal averageWeeklyDebits = default(decimal), decimal closingBalance = default(decimal), string firstDateInStatement = default(string), string lastDateInStatement = default(string), decimal numberOfTransactingMonths = default(decimal), string periodInStatement = default(string), string yearInStatement = default(string))
        {
            this.TotalCreditEntry = totalCreditEntry;
            this.TotalDebitMade = totalDebitMade;
            this.AverageMonthlyBalance = averageMonthlyBalance;
            this.AverageMonthlyCredits = averageMonthlyCredits;
            this.AverageMonthlyDebits = averageMonthlyDebits;
            this.AverageWeeklyBalance = averageWeeklyBalance;
            this.AverageWeeklyCredits = averageWeeklyCredits;
            this.AverageWeeklyDebits = averageWeeklyDebits;
            this.ClosingBalance = closingBalance;
            this.FirstDateInStatement = firstDateInStatement;
            this.LastDateInStatement = lastDateInStatement;
            this.NumberOfTransactingMonths = numberOfTransactingMonths;
            this.PeriodInStatement = periodInStatement;
            this.YearInStatement = yearInStatement;
        }

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

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

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

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

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

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

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

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

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

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

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

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

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

        /// <summary>
        /// Gets or Sets YearInStatement
        /// </summary>
        [DataMember(Name = "yearInStatement", EmitDefaultValue = false)]
        public string YearInStatement { 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 GetAccountAnalysisResponseEntityAccountBreakdown {\n");
            sb.Append("  TotalCreditEntry: ").Append(TotalCreditEntry).Append("\n");
            sb.Append("  TotalDebitMade: ").Append(TotalDebitMade).Append("\n");
            sb.Append("  AverageMonthlyBalance: ").Append(AverageMonthlyBalance).Append("\n");
            sb.Append("  AverageMonthlyCredits: ").Append(AverageMonthlyCredits).Append("\n");
            sb.Append("  AverageMonthlyDebits: ").Append(AverageMonthlyDebits).Append("\n");
            sb.Append("  AverageWeeklyBalance: ").Append(AverageWeeklyBalance).Append("\n");
            sb.Append("  AverageWeeklyCredits: ").Append(AverageWeeklyCredits).Append("\n");
            sb.Append("  AverageWeeklyDebits: ").Append(AverageWeeklyDebits).Append("\n");
            sb.Append("  ClosingBalance: ").Append(ClosingBalance).Append("\n");
            sb.Append("  FirstDateInStatement: ").Append(FirstDateInStatement).Append("\n");
            sb.Append("  LastDateInStatement: ").Append(LastDateInStatement).Append("\n");
            sb.Append("  NumberOfTransactingMonths: ").Append(NumberOfTransactingMonths).Append("\n");
            sb.Append("  PeriodInStatement: ").Append(PeriodInStatement).Append("\n");
            sb.Append("  YearInStatement: ").Append(YearInStatement).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>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as GetAccountAnalysisResponseEntityAccountBreakdown);
        }

        /// <summary>
        /// Returns true if GetAccountAnalysisResponseEntityAccountBreakdown instances are equal
        /// </summary>
        /// <param name="input">Instance of GetAccountAnalysisResponseEntityAccountBreakdown to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(GetAccountAnalysisResponseEntityAccountBreakdown input)
        {
            if (input == null)
            {
                return false;
            }
            return 
                (
                    this.TotalCreditEntry == input.TotalCreditEntry ||
                    this.TotalCreditEntry.Equals(input.TotalCreditEntry)
                ) && 
                (
                    this.TotalDebitMade == input.TotalDebitMade ||
                    this.TotalDebitMade.Equals(input.TotalDebitMade)
                ) && 
                (
                    this.AverageMonthlyBalance == input.AverageMonthlyBalance ||
                    this.AverageMonthlyBalance.Equals(input.AverageMonthlyBalance)
                ) && 
                (
                    this.AverageMonthlyCredits == input.AverageMonthlyCredits ||
                    this.AverageMonthlyCredits.Equals(input.AverageMonthlyCredits)
                ) && 
                (
                    this.AverageMonthlyDebits == input.AverageMonthlyDebits ||
                    this.AverageMonthlyDebits.Equals(input.AverageMonthlyDebits)
                ) && 
                (
                    this.AverageWeeklyBalance == input.AverageWeeklyBalance ||
                    this.AverageWeeklyBalance.Equals(input.AverageWeeklyBalance)
                ) && 
                (
                    this.AverageWeeklyCredits == input.AverageWeeklyCredits ||
                    this.AverageWeeklyCredits.Equals(input.AverageWeeklyCredits)
                ) && 
                (
                    this.AverageWeeklyDebits == input.AverageWeeklyDebits ||
                    this.AverageWeeklyDebits.Equals(input.AverageWeeklyDebits)
                ) && 
                (
                    this.ClosingBalance == input.ClosingBalance ||
                    this.ClosingBalance.Equals(input.ClosingBalance)
                ) && 
                (
                    this.FirstDateInStatement == input.FirstDateInStatement ||
                    (this.FirstDateInStatement != null &&
                    this.FirstDateInStatement.Equals(input.FirstDateInStatement))
                ) && 
                (
                    this.LastDateInStatement == input.LastDateInStatement ||
                    (this.LastDateInStatement != null &&
                    this.LastDateInStatement.Equals(input.LastDateInStatement))
                ) && 
                (
                    this.NumberOfTransactingMonths == input.NumberOfTransactingMonths ||
                    this.NumberOfTransactingMonths.Equals(input.NumberOfTransactingMonths)
                ) && 
                (
                    this.PeriodInStatement == input.PeriodInStatement ||
                    (this.PeriodInStatement != null &&
                    this.PeriodInStatement.Equals(input.PeriodInStatement))
                ) && 
                (
                    this.YearInStatement == input.YearInStatement ||
                    (this.YearInStatement != null &&
                    this.YearInStatement.Equals(input.YearInStatement))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                hashCode = (hashCode * 59) + this.TotalCreditEntry.GetHashCode();
                hashCode = (hashCode * 59) + this.TotalDebitMade.GetHashCode();
                hashCode = (hashCode * 59) + this.AverageMonthlyBalance.GetHashCode();
                hashCode = (hashCode * 59) + this.AverageMonthlyCredits.GetHashCode();
                hashCode = (hashCode * 59) + this.AverageMonthlyDebits.GetHashCode();
                hashCode = (hashCode * 59) + this.AverageWeeklyBalance.GetHashCode();
                hashCode = (hashCode * 59) + this.AverageWeeklyCredits.GetHashCode();
                hashCode = (hashCode * 59) + this.AverageWeeklyDebits.GetHashCode();
                hashCode = (hashCode * 59) + this.ClosingBalance.GetHashCode();
                if (this.FirstDateInStatement != null)
                {
                    hashCode = (hashCode * 59) + this.FirstDateInStatement.GetHashCode();
                }
                if (this.LastDateInStatement != null)
                {
                    hashCode = (hashCode * 59) + this.LastDateInStatement.GetHashCode();
                }
                hashCode = (hashCode * 59) + this.NumberOfTransactingMonths.GetHashCode();
                if (this.PeriodInStatement != null)
                {
                    hashCode = (hashCode * 59) + this.PeriodInStatement.GetHashCode();
                }
                if (this.YearInStatement != null)
                {
                    hashCode = (hashCode * 59) + this.YearInStatement.GetHashCode();
                }
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        public IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
