/*
 * The Plaid API
 * The Plaid REST API. Please see https://plaid.com/docs/api for more details.
 *
 * The version of the OpenAPI document: 2020-09-14_1.680.0
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package com.plaid.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import com.plaid.client.model.TotalReportInflowAmount;
import com.plaid.client.model.TotalReportInflowAmount30d;
import com.plaid.client.model.TotalReportInflowAmount60d;
import com.plaid.client.model.TotalReportInflowAmount90d;
import com.plaid.client.model.TotalReportOutflowAmount;
import com.plaid.client.model.TotalReportOutflowAmount30d;
import com.plaid.client.model.TotalReportOutflowAmount60d;
import com.plaid.client.model.TotalReportOutflowAmount90d;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;

/**
 * Calculated attributes derived from transaction-level data, aggregated across accounts.
 */
@ApiModel(description = "Calculated attributes derived from transaction-level data, aggregated across accounts.")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2025-12-11T18:58:39.328614Z[Etc/UTC]")
public class BaseReportUserAttributes {
  public static final String SERIALIZED_NAME_NSF_OVERDRAFT_TRANSACTIONS_COUNT = "nsf_overdraft_transactions_count";
  @SerializedName(SERIALIZED_NAME_NSF_OVERDRAFT_TRANSACTIONS_COUNT)
  private Integer nsfOverdraftTransactionsCount;

  public static final String SERIALIZED_NAME_NSF_OVERDRAFT_TRANSACTIONS_COUNT30D = "nsf_overdraft_transactions_count_30d";
  @SerializedName(SERIALIZED_NAME_NSF_OVERDRAFT_TRANSACTIONS_COUNT30D)
  private Integer nsfOverdraftTransactionsCount30d;

  public static final String SERIALIZED_NAME_NSF_OVERDRAFT_TRANSACTIONS_COUNT60D = "nsf_overdraft_transactions_count_60d";
  @SerializedName(SERIALIZED_NAME_NSF_OVERDRAFT_TRANSACTIONS_COUNT60D)
  private Integer nsfOverdraftTransactionsCount60d;

  public static final String SERIALIZED_NAME_NSF_OVERDRAFT_TRANSACTIONS_COUNT90D = "nsf_overdraft_transactions_count_90d";
  @SerializedName(SERIALIZED_NAME_NSF_OVERDRAFT_TRANSACTIONS_COUNT90D)
  private Integer nsfOverdraftTransactionsCount90d;

  public static final String SERIALIZED_NAME_TOTAL_INFLOW_AMOUNT = "total_inflow_amount";
  @SerializedName(SERIALIZED_NAME_TOTAL_INFLOW_AMOUNT)
  private TotalReportInflowAmount totalInflowAmount;

  public static final String SERIALIZED_NAME_TOTAL_INFLOW_AMOUNT30D = "total_inflow_amount_30d";
  @SerializedName(SERIALIZED_NAME_TOTAL_INFLOW_AMOUNT30D)
  private TotalReportInflowAmount30d totalInflowAmount30d;

  public static final String SERIALIZED_NAME_TOTAL_INFLOW_AMOUNT60D = "total_inflow_amount_60d";
  @SerializedName(SERIALIZED_NAME_TOTAL_INFLOW_AMOUNT60D)
  private TotalReportInflowAmount60d totalInflowAmount60d;

  public static final String SERIALIZED_NAME_TOTAL_INFLOW_AMOUNT90D = "total_inflow_amount_90d";
  @SerializedName(SERIALIZED_NAME_TOTAL_INFLOW_AMOUNT90D)
  private TotalReportInflowAmount90d totalInflowAmount90d;

  public static final String SERIALIZED_NAME_TOTAL_OUTFLOW_AMOUNT = "total_outflow_amount";
  @SerializedName(SERIALIZED_NAME_TOTAL_OUTFLOW_AMOUNT)
  private TotalReportOutflowAmount totalOutflowAmount;

  public static final String SERIALIZED_NAME_TOTAL_OUTFLOW_AMOUNT30D = "total_outflow_amount_30d";
  @SerializedName(SERIALIZED_NAME_TOTAL_OUTFLOW_AMOUNT30D)
  private TotalReportOutflowAmount30d totalOutflowAmount30d;

  public static final String SERIALIZED_NAME_TOTAL_OUTFLOW_AMOUNT60D = "total_outflow_amount_60d";
  @SerializedName(SERIALIZED_NAME_TOTAL_OUTFLOW_AMOUNT60D)
  private TotalReportOutflowAmount60d totalOutflowAmount60d;

  public static final String SERIALIZED_NAME_TOTAL_OUTFLOW_AMOUNT90D = "total_outflow_amount_90d";
  @SerializedName(SERIALIZED_NAME_TOTAL_OUTFLOW_AMOUNT90D)
  private TotalReportOutflowAmount90d totalOutflowAmount90d;


  public BaseReportUserAttributes nsfOverdraftTransactionsCount(Integer nsfOverdraftTransactionsCount) {
    
    this.nsfOverdraftTransactionsCount = nsfOverdraftTransactionsCount;
    return this;
  }

   /**
   * The number of net NSF fee transactions in the time range for the report (not counting any fees that were reversed within that time range).
   * @return nsfOverdraftTransactionsCount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The number of net NSF fee transactions in the time range for the report (not counting any fees that were reversed within that time range).")

  public Integer getNsfOverdraftTransactionsCount() {
    return nsfOverdraftTransactionsCount;
  }


  public void setNsfOverdraftTransactionsCount(Integer nsfOverdraftTransactionsCount) {
    this.nsfOverdraftTransactionsCount = nsfOverdraftTransactionsCount;
  }


  public BaseReportUserAttributes nsfOverdraftTransactionsCount30d(Integer nsfOverdraftTransactionsCount30d) {
    
    this.nsfOverdraftTransactionsCount30d = nsfOverdraftTransactionsCount30d;
    return this;
  }

   /**
   * The number of net NSF fee transactions in the last 30 days in the report (not counting any fees that were reversed within that time range).
   * @return nsfOverdraftTransactionsCount30d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The number of net NSF fee transactions in the last 30 days in the report (not counting any fees that were reversed within that time range).")

  public Integer getNsfOverdraftTransactionsCount30d() {
    return nsfOverdraftTransactionsCount30d;
  }


  public void setNsfOverdraftTransactionsCount30d(Integer nsfOverdraftTransactionsCount30d) {
    this.nsfOverdraftTransactionsCount30d = nsfOverdraftTransactionsCount30d;
  }


  public BaseReportUserAttributes nsfOverdraftTransactionsCount60d(Integer nsfOverdraftTransactionsCount60d) {
    
    this.nsfOverdraftTransactionsCount60d = nsfOverdraftTransactionsCount60d;
    return this;
  }

   /**
   * The number of net NSF fee transactions in the last 60 days in the report (not counting any fees that were reversed within that time range).
   * @return nsfOverdraftTransactionsCount60d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The number of net NSF fee transactions in the last 60 days in the report (not counting any fees that were reversed within that time range).")

  public Integer getNsfOverdraftTransactionsCount60d() {
    return nsfOverdraftTransactionsCount60d;
  }


  public void setNsfOverdraftTransactionsCount60d(Integer nsfOverdraftTransactionsCount60d) {
    this.nsfOverdraftTransactionsCount60d = nsfOverdraftTransactionsCount60d;
  }


  public BaseReportUserAttributes nsfOverdraftTransactionsCount90d(Integer nsfOverdraftTransactionsCount90d) {
    
    this.nsfOverdraftTransactionsCount90d = nsfOverdraftTransactionsCount90d;
    return this;
  }

   /**
   * The number of net NSF fee transactions in the last 90 days in the report (not counting any fees that were reversed within that time range).
   * @return nsfOverdraftTransactionsCount90d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The number of net NSF fee transactions in the last 90 days in the report (not counting any fees that were reversed within that time range).")

  public Integer getNsfOverdraftTransactionsCount90d() {
    return nsfOverdraftTransactionsCount90d;
  }


  public void setNsfOverdraftTransactionsCount90d(Integer nsfOverdraftTransactionsCount90d) {
    this.nsfOverdraftTransactionsCount90d = nsfOverdraftTransactionsCount90d;
  }


  public BaseReportUserAttributes totalInflowAmount(TotalReportInflowAmount totalInflowAmount) {
    
    this.totalInflowAmount = totalInflowAmount;
    return this;
  }

   /**
   * Get totalInflowAmount
   * @return totalInflowAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public TotalReportInflowAmount getTotalInflowAmount() {
    return totalInflowAmount;
  }


  public void setTotalInflowAmount(TotalReportInflowAmount totalInflowAmount) {
    this.totalInflowAmount = totalInflowAmount;
  }


  public BaseReportUserAttributes totalInflowAmount30d(TotalReportInflowAmount30d totalInflowAmount30d) {
    
    this.totalInflowAmount30d = totalInflowAmount30d;
    return this;
  }

   /**
   * Get totalInflowAmount30d
   * @return totalInflowAmount30d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public TotalReportInflowAmount30d getTotalInflowAmount30d() {
    return totalInflowAmount30d;
  }


  public void setTotalInflowAmount30d(TotalReportInflowAmount30d totalInflowAmount30d) {
    this.totalInflowAmount30d = totalInflowAmount30d;
  }


  public BaseReportUserAttributes totalInflowAmount60d(TotalReportInflowAmount60d totalInflowAmount60d) {
    
    this.totalInflowAmount60d = totalInflowAmount60d;
    return this;
  }

   /**
   * Get totalInflowAmount60d
   * @return totalInflowAmount60d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public TotalReportInflowAmount60d getTotalInflowAmount60d() {
    return totalInflowAmount60d;
  }


  public void setTotalInflowAmount60d(TotalReportInflowAmount60d totalInflowAmount60d) {
    this.totalInflowAmount60d = totalInflowAmount60d;
  }


  public BaseReportUserAttributes totalInflowAmount90d(TotalReportInflowAmount90d totalInflowAmount90d) {
    
    this.totalInflowAmount90d = totalInflowAmount90d;
    return this;
  }

   /**
   * Get totalInflowAmount90d
   * @return totalInflowAmount90d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public TotalReportInflowAmount90d getTotalInflowAmount90d() {
    return totalInflowAmount90d;
  }


  public void setTotalInflowAmount90d(TotalReportInflowAmount90d totalInflowAmount90d) {
    this.totalInflowAmount90d = totalInflowAmount90d;
  }


  public BaseReportUserAttributes totalOutflowAmount(TotalReportOutflowAmount totalOutflowAmount) {
    
    this.totalOutflowAmount = totalOutflowAmount;
    return this;
  }

   /**
   * Get totalOutflowAmount
   * @return totalOutflowAmount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public TotalReportOutflowAmount getTotalOutflowAmount() {
    return totalOutflowAmount;
  }


  public void setTotalOutflowAmount(TotalReportOutflowAmount totalOutflowAmount) {
    this.totalOutflowAmount = totalOutflowAmount;
  }


  public BaseReportUserAttributes totalOutflowAmount30d(TotalReportOutflowAmount30d totalOutflowAmount30d) {
    
    this.totalOutflowAmount30d = totalOutflowAmount30d;
    return this;
  }

   /**
   * Get totalOutflowAmount30d
   * @return totalOutflowAmount30d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public TotalReportOutflowAmount30d getTotalOutflowAmount30d() {
    return totalOutflowAmount30d;
  }


  public void setTotalOutflowAmount30d(TotalReportOutflowAmount30d totalOutflowAmount30d) {
    this.totalOutflowAmount30d = totalOutflowAmount30d;
  }


  public BaseReportUserAttributes totalOutflowAmount60d(TotalReportOutflowAmount60d totalOutflowAmount60d) {
    
    this.totalOutflowAmount60d = totalOutflowAmount60d;
    return this;
  }

   /**
   * Get totalOutflowAmount60d
   * @return totalOutflowAmount60d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public TotalReportOutflowAmount60d getTotalOutflowAmount60d() {
    return totalOutflowAmount60d;
  }


  public void setTotalOutflowAmount60d(TotalReportOutflowAmount60d totalOutflowAmount60d) {
    this.totalOutflowAmount60d = totalOutflowAmount60d;
  }


  public BaseReportUserAttributes totalOutflowAmount90d(TotalReportOutflowAmount90d totalOutflowAmount90d) {
    
    this.totalOutflowAmount90d = totalOutflowAmount90d;
    return this;
  }

   /**
   * Get totalOutflowAmount90d
   * @return totalOutflowAmount90d
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public TotalReportOutflowAmount90d getTotalOutflowAmount90d() {
    return totalOutflowAmount90d;
  }


  public void setTotalOutflowAmount90d(TotalReportOutflowAmount90d totalOutflowAmount90d) {
    this.totalOutflowAmount90d = totalOutflowAmount90d;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    BaseReportUserAttributes baseReportUserAttributes = (BaseReportUserAttributes) o;
    return Objects.equals(this.nsfOverdraftTransactionsCount, baseReportUserAttributes.nsfOverdraftTransactionsCount) &&
        Objects.equals(this.nsfOverdraftTransactionsCount30d, baseReportUserAttributes.nsfOverdraftTransactionsCount30d) &&
        Objects.equals(this.nsfOverdraftTransactionsCount60d, baseReportUserAttributes.nsfOverdraftTransactionsCount60d) &&
        Objects.equals(this.nsfOverdraftTransactionsCount90d, baseReportUserAttributes.nsfOverdraftTransactionsCount90d) &&
        Objects.equals(this.totalInflowAmount, baseReportUserAttributes.totalInflowAmount) &&
        Objects.equals(this.totalInflowAmount30d, baseReportUserAttributes.totalInflowAmount30d) &&
        Objects.equals(this.totalInflowAmount60d, baseReportUserAttributes.totalInflowAmount60d) &&
        Objects.equals(this.totalInflowAmount90d, baseReportUserAttributes.totalInflowAmount90d) &&
        Objects.equals(this.totalOutflowAmount, baseReportUserAttributes.totalOutflowAmount) &&
        Objects.equals(this.totalOutflowAmount30d, baseReportUserAttributes.totalOutflowAmount30d) &&
        Objects.equals(this.totalOutflowAmount60d, baseReportUserAttributes.totalOutflowAmount60d) &&
        Objects.equals(this.totalOutflowAmount90d, baseReportUserAttributes.totalOutflowAmount90d);
  }

  @Override
  public int hashCode() {
    return Objects.hash(nsfOverdraftTransactionsCount, nsfOverdraftTransactionsCount30d, nsfOverdraftTransactionsCount60d, nsfOverdraftTransactionsCount90d, totalInflowAmount, totalInflowAmount30d, totalInflowAmount60d, totalInflowAmount90d, totalOutflowAmount, totalOutflowAmount30d, totalOutflowAmount60d, totalOutflowAmount90d);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class BaseReportUserAttributes {\n");
    sb.append("    nsfOverdraftTransactionsCount: ").append(toIndentedString(nsfOverdraftTransactionsCount)).append("\n");
    sb.append("    nsfOverdraftTransactionsCount30d: ").append(toIndentedString(nsfOverdraftTransactionsCount30d)).append("\n");
    sb.append("    nsfOverdraftTransactionsCount60d: ").append(toIndentedString(nsfOverdraftTransactionsCount60d)).append("\n");
    sb.append("    nsfOverdraftTransactionsCount90d: ").append(toIndentedString(nsfOverdraftTransactionsCount90d)).append("\n");
    sb.append("    totalInflowAmount: ").append(toIndentedString(totalInflowAmount)).append("\n");
    sb.append("    totalInflowAmount30d: ").append(toIndentedString(totalInflowAmount30d)).append("\n");
    sb.append("    totalInflowAmount60d: ").append(toIndentedString(totalInflowAmount60d)).append("\n");
    sb.append("    totalInflowAmount90d: ").append(toIndentedString(totalInflowAmount90d)).append("\n");
    sb.append("    totalOutflowAmount: ").append(toIndentedString(totalOutflowAmount)).append("\n");
    sb.append("    totalOutflowAmount30d: ").append(toIndentedString(totalOutflowAmount30d)).append("\n");
    sb.append("    totalOutflowAmount60d: ").append(toIndentedString(totalOutflowAmount60d)).append("\n");
    sb.append("    totalOutflowAmount90d: ").append(toIndentedString(totalOutflowAmount90d)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

