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

/**
 * ProcessorInvestmentsTransactionsGetRequest defines the response schema for &#x60;/processor/investments/transactions/get&#x60;
 */
@ApiModel(description = "ProcessorInvestmentsTransactionsGetRequest defines the response schema for `/processor/investments/transactions/get`")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2025-12-11T18:58:39.328614Z[Etc/UTC]")
public class ProcessorInvestmentsTransactionsGetResponse {
  public static final String SERIALIZED_NAME_ACCOUNT = "account";
  @SerializedName(SERIALIZED_NAME_ACCOUNT)
  private AccountBase account;

  public static final String SERIALIZED_NAME_INVESTMENT_TRANSACTIONS = "investment_transactions";
  @SerializedName(SERIALIZED_NAME_INVESTMENT_TRANSACTIONS)
  private List<InvestmentTransaction> investmentTransactions = new ArrayList<>();

  public static final String SERIALIZED_NAME_SECURITIES = "securities";
  @SerializedName(SERIALIZED_NAME_SECURITIES)
  private List<Security> securities = new ArrayList<>();

  public static final String SERIALIZED_NAME_TOTAL_INVESTMENT_TRANSACTIONS = "total_investment_transactions";
  @SerializedName(SERIALIZED_NAME_TOTAL_INVESTMENT_TRANSACTIONS)
  private Integer totalInvestmentTransactions;

  public static final String SERIALIZED_NAME_REQUEST_ID = "request_id";
  @SerializedName(SERIALIZED_NAME_REQUEST_ID)
  private String requestId;

  public static final String SERIALIZED_NAME_IS_INVESTMENTS_FALLBACK_ITEM = "is_investments_fallback_item";
  @SerializedName(SERIALIZED_NAME_IS_INVESTMENTS_FALLBACK_ITEM)
  private Boolean isInvestmentsFallbackItem;


  public ProcessorInvestmentsTransactionsGetResponse account(AccountBase account) {
    
    this.account = account;
    return this;
  }

   /**
   * Get account
   * @return account
  **/
  @ApiModelProperty(required = true, value = "")

  public AccountBase getAccount() {
    return account;
  }


  public void setAccount(AccountBase account) {
    this.account = account;
  }


  public ProcessorInvestmentsTransactionsGetResponse investmentTransactions(List<InvestmentTransaction> investmentTransactions) {
    
    this.investmentTransactions = investmentTransactions;
    return this;
  }

  public ProcessorInvestmentsTransactionsGetResponse addInvestmentTransactionsItem(InvestmentTransaction investmentTransactionsItem) {
    this.investmentTransactions.add(investmentTransactionsItem);
    return this;
  }

   /**
   * An array containing investment transactions from the account. Investments transactions are returned in reverse chronological order, with the most recent at the beginning of the array. The maximum number of transactions returned is determined by the &#x60;count&#x60; parameter.
   * @return investmentTransactions
  **/
  @ApiModelProperty(required = true, value = "An array containing investment transactions from the account. Investments transactions are returned in reverse chronological order, with the most recent at the beginning of the array. The maximum number of transactions returned is determined by the `count` parameter.")

  public List<InvestmentTransaction> getInvestmentTransactions() {
    return investmentTransactions;
  }


  public void setInvestmentTransactions(List<InvestmentTransaction> investmentTransactions) {
    this.investmentTransactions = investmentTransactions;
  }


  public ProcessorInvestmentsTransactionsGetResponse securities(List<Security> securities) {
    
    this.securities = securities;
    return this;
  }

  public ProcessorInvestmentsTransactionsGetResponse addSecuritiesItem(Security securitiesItem) {
    this.securities.add(securitiesItem);
    return this;
  }

   /**
   * All securities for which there is a corresponding transaction being fetched.
   * @return securities
  **/
  @ApiModelProperty(required = true, value = "All securities for which there is a corresponding transaction being fetched.")

  public List<Security> getSecurities() {
    return securities;
  }


  public void setSecurities(List<Security> securities) {
    this.securities = securities;
  }


  public ProcessorInvestmentsTransactionsGetResponse totalInvestmentTransactions(Integer totalInvestmentTransactions) {
    
    this.totalInvestmentTransactions = totalInvestmentTransactions;
    return this;
  }

   /**
   * The total number of transactions available within the date range specified. If &#x60;total_investment_transactions&#x60; is larger than the size of the &#x60;transactions&#x60; array, more transactions are available and can be fetched via manipulating the &#x60;offset&#x60; parameter.
   * @return totalInvestmentTransactions
  **/
  @ApiModelProperty(required = true, value = "The total number of transactions available within the date range specified. If `total_investment_transactions` is larger than the size of the `transactions` array, more transactions are available and can be fetched via manipulating the `offset` parameter.")

  public Integer getTotalInvestmentTransactions() {
    return totalInvestmentTransactions;
  }


  public void setTotalInvestmentTransactions(Integer totalInvestmentTransactions) {
    this.totalInvestmentTransactions = totalInvestmentTransactions;
  }


  public ProcessorInvestmentsTransactionsGetResponse requestId(String requestId) {
    
    this.requestId = requestId;
    return this;
  }

   /**
   * A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
   * @return requestId
  **/
  @ApiModelProperty(required = true, value = "A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.")

  public String getRequestId() {
    return requestId;
  }


  public void setRequestId(String requestId) {
    this.requestId = requestId;
  }


  public ProcessorInvestmentsTransactionsGetResponse isInvestmentsFallbackItem(Boolean isInvestmentsFallbackItem) {
    
    this.isInvestmentsFallbackItem = isInvestmentsFallbackItem;
    return this;
  }

   /**
   * When true, this field indicates that the Item&#39;s portfolio was manually created with the Investments Fallback flow.
   * @return isInvestmentsFallbackItem
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "When true, this field indicates that the Item's portfolio was manually created with the Investments Fallback flow.")

  public Boolean getIsInvestmentsFallbackItem() {
    return isInvestmentsFallbackItem;
  }


  public void setIsInvestmentsFallbackItem(Boolean isInvestmentsFallbackItem) {
    this.isInvestmentsFallbackItem = isInvestmentsFallbackItem;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ProcessorInvestmentsTransactionsGetResponse processorInvestmentsTransactionsGetResponse = (ProcessorInvestmentsTransactionsGetResponse) o;
    return Objects.equals(this.account, processorInvestmentsTransactionsGetResponse.account) &&
        Objects.equals(this.investmentTransactions, processorInvestmentsTransactionsGetResponse.investmentTransactions) &&
        Objects.equals(this.securities, processorInvestmentsTransactionsGetResponse.securities) &&
        Objects.equals(this.totalInvestmentTransactions, processorInvestmentsTransactionsGetResponse.totalInvestmentTransactions) &&
        Objects.equals(this.requestId, processorInvestmentsTransactionsGetResponse.requestId) &&
        Objects.equals(this.isInvestmentsFallbackItem, processorInvestmentsTransactionsGetResponse.isInvestmentsFallbackItem);
  }

  @Override
  public int hashCode() {
    return Objects.hash(account, investmentTransactions, securities, totalInvestmentTransactions, requestId, isInvestmentsFallbackItem);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ProcessorInvestmentsTransactionsGetResponse {\n");
    sb.append("    account: ").append(toIndentedString(account)).append("\n");
    sb.append("    investmentTransactions: ").append(toIndentedString(investmentTransactions)).append("\n");
    sb.append("    securities: ").append(toIndentedString(securities)).append("\n");
    sb.append("    totalInvestmentTransactions: ").append(toIndentedString(totalInvestmentTransactions)).append("\n");
    sb.append("    requestId: ").append(toIndentedString(requestId)).append("\n");
    sb.append("    isInvestmentsFallbackItem: ").append(toIndentedString(isInvestmentsFallbackItem)).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    ");
  }

}

