/*
 * 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.MonthlyAverage;
import com.plaid.client.model.MonthlySummary;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Insights into gambling-related transactions, including frequency, amounts, and top merchants.
 */
@ApiModel(description = "Insights into gambling-related transactions, including frequency, amounts, and top merchants.")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2025-12-11T18:58:39.328614Z[Etc/UTC]")
public class GamblingIndicators {
  public static final String SERIALIZED_NAME_AMOUNT = "amount";
  @SerializedName(SERIALIZED_NAME_AMOUNT)
  private Double amount;

  public static final String SERIALIZED_NAME_ISO_CURRENCY_CODE = "iso_currency_code";
  @SerializedName(SERIALIZED_NAME_ISO_CURRENCY_CODE)
  private String isoCurrencyCode;

  public static final String SERIALIZED_NAME_UNOFFICIAL_CURRENCY_CODE = "unofficial_currency_code";
  @SerializedName(SERIALIZED_NAME_UNOFFICIAL_CURRENCY_CODE)
  private String unofficialCurrencyCode;

  public static final String SERIALIZED_NAME_MONTHLY_AVERAGE = "monthly_average";
  @SerializedName(SERIALIZED_NAME_MONTHLY_AVERAGE)
  private MonthlyAverage monthlyAverage;

  public static final String SERIALIZED_NAME_TOP_MERCHANTS = "top_merchants";
  @SerializedName(SERIALIZED_NAME_TOP_MERCHANTS)
  private List<String> topMerchants = null;

  public static final String SERIALIZED_NAME_TRANSACTIONS_COUNT = "transactions_count";
  @SerializedName(SERIALIZED_NAME_TRANSACTIONS_COUNT)
  private Integer transactionsCount;

  public static final String SERIALIZED_NAME_MONTHLY_SUMMARIES = "monthly_summaries";
  @SerializedName(SERIALIZED_NAME_MONTHLY_SUMMARIES)
  private List<MonthlySummary> monthlySummaries = null;

  public static final String SERIALIZED_NAME_DAYS_SINCE_LAST_OCCURRENCE = "days_since_last_occurrence";
  @SerializedName(SERIALIZED_NAME_DAYS_SINCE_LAST_OCCURRENCE)
  private Integer daysSinceLastOccurrence;

  public static final String SERIALIZED_NAME_PERCENTAGE_OF_INCOME = "percentage_of_income";
  @SerializedName(SERIALIZED_NAME_PERCENTAGE_OF_INCOME)
  private Double percentageOfIncome;


  public GamblingIndicators amount(Double amount) {
    
    this.amount = amount;
    return this;
  }

   /**
   * The total value of transactions that fall into the &#x60;GAMBLING&#x60; credit category, across all the accounts in the report.
   * @return amount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The total value of transactions that fall into the `GAMBLING` credit category, across all the accounts in the report.")

  public Double getAmount() {
    return amount;
  }


  public void setAmount(Double amount) {
    this.amount = amount;
  }


  public GamblingIndicators isoCurrencyCode(String isoCurrencyCode) {
    
    this.isoCurrencyCode = isoCurrencyCode;
    return this;
  }

   /**
   * The ISO-4217 currency code of the amount. Always &#x60;null&#x60; if &#x60;unofficial_currency_code&#x60; is non-&#x60;null&#x60;.
   * @return isoCurrencyCode
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The ISO-4217 currency code of the amount. Always `null` if `unofficial_currency_code` is non-`null`.")

  public String getIsoCurrencyCode() {
    return isoCurrencyCode;
  }


  public void setIsoCurrencyCode(String isoCurrencyCode) {
    this.isoCurrencyCode = isoCurrencyCode;
  }


  public GamblingIndicators unofficialCurrencyCode(String unofficialCurrencyCode) {
    
    this.unofficialCurrencyCode = unofficialCurrencyCode;
    return this;
  }

   /**
   * The unofficial currency code associated with the amount. Always &#x60;null&#x60; if &#x60;iso_currency_code&#x60; is non-&#x60;null&#x60;.  See the [currency code schema](https://plaid.com/docs/api/accounts#currency-code-schema) for a full listing of supported &#x60;unofficial_currency_code&#x60;s.
   * @return unofficialCurrencyCode
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The unofficial currency code associated with the amount. Always `null` if `iso_currency_code` is non-`null`.  See the [currency code schema](https://plaid.com/docs/api/accounts#currency-code-schema) for a full listing of supported `unofficial_currency_code`s.")

  public String getUnofficialCurrencyCode() {
    return unofficialCurrencyCode;
  }


  public void setUnofficialCurrencyCode(String unofficialCurrencyCode) {
    this.unofficialCurrencyCode = unofficialCurrencyCode;
  }


  public GamblingIndicators monthlyAverage(MonthlyAverage monthlyAverage) {
    
    this.monthlyAverage = monthlyAverage;
    return this;
  }

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

  public MonthlyAverage getMonthlyAverage() {
    return monthlyAverage;
  }


  public void setMonthlyAverage(MonthlyAverage monthlyAverage) {
    this.monthlyAverage = monthlyAverage;
  }


  public GamblingIndicators topMerchants(List<String> topMerchants) {
    
    this.topMerchants = topMerchants;
    return this;
  }

  public GamblingIndicators addTopMerchantsItem(String topMerchantsItem) {
    if (this.topMerchants == null) {
      this.topMerchants = new ArrayList<>();
    }
    this.topMerchants.add(topMerchantsItem);
    return this;
  }

   /**
   * Up to 3 top merchants that the user had the most transactions for in the given time window, in descending order of total spend.  If the user has not spent money on any merchants in the given time window, this list will be empty.
   * @return topMerchants
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "Up to 3 top merchants that the user had the most transactions for in the given time window, in descending order of total spend.  If the user has not spent money on any merchants in the given time window, this list will be empty.")

  public List<String> getTopMerchants() {
    return topMerchants;
  }


  public void setTopMerchants(List<String> topMerchants) {
    this.topMerchants = topMerchants;
  }


  public GamblingIndicators transactionsCount(Integer transactionsCount) {
    
    this.transactionsCount = transactionsCount;
    return this;
  }

   /**
   * The total number of transactions that fall into the &#x60;GAMBLING&#x60; credit category, across all the accounts in the report.
   * @return transactionsCount
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The total number of transactions that fall into the `GAMBLING` credit category, across all the accounts in the report.")

  public Integer getTransactionsCount() {
    return transactionsCount;
  }


  public void setTransactionsCount(Integer transactionsCount) {
    this.transactionsCount = transactionsCount;
  }


  public GamblingIndicators monthlySummaries(List<MonthlySummary> monthlySummaries) {
    
    this.monthlySummaries = monthlySummaries;
    return this;
  }

  public GamblingIndicators addMonthlySummariesItem(MonthlySummary monthlySummariesItem) {
    if (this.monthlySummaries == null) {
      this.monthlySummaries = new ArrayList<>();
    }
    this.monthlySummaries.add(monthlySummariesItem);
    return this;
  }

   /**
   * The monthly summaries of the transactions that fall into the &#x60;GAMBLING&#x60; category within the given time window, across all the accounts in the report.
   * @return monthlySummaries
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The monthly summaries of the transactions that fall into the `GAMBLING` category within the given time window, across all the accounts in the report.")

  public List<MonthlySummary> getMonthlySummaries() {
    return monthlySummaries;
  }


  public void setMonthlySummaries(List<MonthlySummary> monthlySummaries) {
    this.monthlySummaries = monthlySummaries;
  }


  public GamblingIndicators daysSinceLastOccurrence(Integer daysSinceLastOccurrence) {
    
    this.daysSinceLastOccurrence = daysSinceLastOccurrence;
    return this;
  }

   /**
   * The number of days since the last transaction that falls into the &#x60;GAMBLING&#x60; category, across all the accounts in the report.
   * @return daysSinceLastOccurrence
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The number of days since the last transaction that falls into the `GAMBLING` category, across all the accounts in the report.")

  public Integer getDaysSinceLastOccurrence() {
    return daysSinceLastOccurrence;
  }


  public void setDaysSinceLastOccurrence(Integer daysSinceLastOccurrence) {
    this.daysSinceLastOccurrence = daysSinceLastOccurrence;
  }


  public GamblingIndicators percentageOfIncome(Double percentageOfIncome) {
    
    this.percentageOfIncome = percentageOfIncome;
    return this;
  }

   /**
   * The percentage of the user&#39;s monthly inflows that was spent on transactions that fall into the &#x60;GAMBLING&#x60; category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the &#x60;GAMBLING&#x60; credit category. If there&#39;s no available income for the given time period, this field value will be &#x60;-1&#x60;
   * @return percentageOfIncome
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "The percentage of the user's monthly inflows that was spent on transactions that fall into the `GAMBLING` category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the `GAMBLING` credit category. If there's no available income for the given time period, this field value will be `-1`")

  public Double getPercentageOfIncome() {
    return percentageOfIncome;
  }


  public void setPercentageOfIncome(Double percentageOfIncome) {
    this.percentageOfIncome = percentageOfIncome;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    GamblingIndicators gamblingIndicators = (GamblingIndicators) o;
    return Objects.equals(this.amount, gamblingIndicators.amount) &&
        Objects.equals(this.isoCurrencyCode, gamblingIndicators.isoCurrencyCode) &&
        Objects.equals(this.unofficialCurrencyCode, gamblingIndicators.unofficialCurrencyCode) &&
        Objects.equals(this.monthlyAverage, gamblingIndicators.monthlyAverage) &&
        Objects.equals(this.topMerchants, gamblingIndicators.topMerchants) &&
        Objects.equals(this.transactionsCount, gamblingIndicators.transactionsCount) &&
        Objects.equals(this.monthlySummaries, gamblingIndicators.monthlySummaries) &&
        Objects.equals(this.daysSinceLastOccurrence, gamblingIndicators.daysSinceLastOccurrence) &&
        Objects.equals(this.percentageOfIncome, gamblingIndicators.percentageOfIncome);
  }

  @Override
  public int hashCode() {
    return Objects.hash(amount, isoCurrencyCode, unofficialCurrencyCode, monthlyAverage, topMerchants, transactionsCount, monthlySummaries, daysSinceLastOccurrence, percentageOfIncome);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class GamblingIndicators {\n");
    sb.append("    amount: ").append(toIndentedString(amount)).append("\n");
    sb.append("    isoCurrencyCode: ").append(toIndentedString(isoCurrencyCode)).append("\n");
    sb.append("    unofficialCurrencyCode: ").append(toIndentedString(unofficialCurrencyCode)).append("\n");
    sb.append("    monthlyAverage: ").append(toIndentedString(monthlyAverage)).append("\n");
    sb.append("    topMerchants: ").append(toIndentedString(topMerchants)).append("\n");
    sb.append("    transactionsCount: ").append(toIndentedString(transactionsCount)).append("\n");
    sb.append("    monthlySummaries: ").append(toIndentedString(monthlySummaries)).append("\n");
    sb.append("    daysSinceLastOccurrence: ").append(toIndentedString(daysSinceLastOccurrence)).append("\n");
    sb.append("    percentageOfIncome: ").append(toIndentedString(percentageOfIncome)).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    ");
  }

}

