/*
 * 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.CreditSessionDocumentIncomeResult;
import com.plaid.client.model.LinkSessionBankIncomeResult;
import com.plaid.client.model.LinkSessionCraDocumentUploadResult;
import com.plaid.client.model.LinkSessionCraItemAddResult;
import com.plaid.client.model.LinkSessionCraUpdateResult;
import com.plaid.client.model.LinkSessionItemAddResult;
import com.plaid.client.model.LinkSessionPayrollIncomeResult;
import com.plaid.client.model.LinkSessionProtectResult;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * The set of results for a Link session.
 */
@ApiModel(description = "The set of results for a Link session.")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2025-12-11T18:58:39.328614Z[Etc/UTC]")
public class LinkSessionResults {
  public static final String SERIALIZED_NAME_ITEM_ADD_RESULTS = "item_add_results";
  @SerializedName(SERIALIZED_NAME_ITEM_ADD_RESULTS)
  private List<LinkSessionItemAddResult> itemAddResults = new ArrayList<>();

  public static final String SERIALIZED_NAME_CRA_ITEM_ADD_RESULTS = "cra_item_add_results";
  @SerializedName(SERIALIZED_NAME_CRA_ITEM_ADD_RESULTS)
  private List<LinkSessionCraItemAddResult> craItemAddResults = new ArrayList<>();

  public static final String SERIALIZED_NAME_CRA_UPDATE_RESULTS = "cra_update_results";
  @SerializedName(SERIALIZED_NAME_CRA_UPDATE_RESULTS)
  private List<LinkSessionCraUpdateResult> craUpdateResults = new ArrayList<>();

  public static final String SERIALIZED_NAME_BANK_INCOME_RESULTS = "bank_income_results";
  @SerializedName(SERIALIZED_NAME_BANK_INCOME_RESULTS)
  private List<LinkSessionBankIncomeResult> bankIncomeResults = new ArrayList<>();

  public static final String SERIALIZED_NAME_PAYROLL_INCOME_RESULTS = "payroll_income_results";
  @SerializedName(SERIALIZED_NAME_PAYROLL_INCOME_RESULTS)
  private List<LinkSessionPayrollIncomeResult> payrollIncomeResults = new ArrayList<>();

  public static final String SERIALIZED_NAME_DOCUMENT_INCOME_RESULTS = "document_income_results";
  @SerializedName(SERIALIZED_NAME_DOCUMENT_INCOME_RESULTS)
  private CreditSessionDocumentIncomeResult documentIncomeResults;

  public static final String SERIALIZED_NAME_CRA_DOCUMENT_UPLOAD_RESULTS = "cra_document_upload_results";
  @SerializedName(SERIALIZED_NAME_CRA_DOCUMENT_UPLOAD_RESULTS)
  private LinkSessionCraDocumentUploadResult craDocumentUploadResults;

  public static final String SERIALIZED_NAME_PROTECT_RESULTS = "protect_results";
  @SerializedName(SERIALIZED_NAME_PROTECT_RESULTS)
  private LinkSessionProtectResult protectResults;


  public LinkSessionResults itemAddResults(List<LinkSessionItemAddResult> itemAddResults) {
    
    this.itemAddResults = itemAddResults;
    return this;
  }

  public LinkSessionResults addItemAddResultsItem(LinkSessionItemAddResult itemAddResultsItem) {
    this.itemAddResults.add(itemAddResultsItem);
    return this;
  }

   /**
   * The set of Item adds for the Link session. If you are not receiving this field and are instead receiving the deprecated &#x60;on_success&#x60; field, contact your Account Manager to update your integration.
   * @return itemAddResults
  **/
  @ApiModelProperty(required = true, value = "The set of Item adds for the Link session. If you are not receiving this field and are instead receiving the deprecated `on_success` field, contact your Account Manager to update your integration.")

  public List<LinkSessionItemAddResult> getItemAddResults() {
    return itemAddResults;
  }


  public void setItemAddResults(List<LinkSessionItemAddResult> itemAddResults) {
    this.itemAddResults = itemAddResults;
  }


  public LinkSessionResults craItemAddResults(List<LinkSessionCraItemAddResult> craItemAddResults) {
    
    this.craItemAddResults = craItemAddResults;
    return this;
  }

  public LinkSessionResults addCraItemAddResultsItem(LinkSessionCraItemAddResult craItemAddResultsItem) {
    this.craItemAddResults.add(craItemAddResultsItem);
    return this;
  }

   /**
   * The set of Plaid Check Item adds for the Link session.
   * @return craItemAddResults
  **/
  @ApiModelProperty(required = true, value = "The set of Plaid Check Item adds for the Link session.")

  public List<LinkSessionCraItemAddResult> getCraItemAddResults() {
    return craItemAddResults;
  }


  public void setCraItemAddResults(List<LinkSessionCraItemAddResult> craItemAddResults) {
    this.craItemAddResults = craItemAddResults;
  }


  public LinkSessionResults craUpdateResults(List<LinkSessionCraUpdateResult> craUpdateResults) {
    
    this.craUpdateResults = craUpdateResults;
    return this;
  }

  public LinkSessionResults addCraUpdateResultsItem(LinkSessionCraUpdateResult craUpdateResultsItem) {
    this.craUpdateResults.add(craUpdateResultsItem);
    return this;
  }

   /**
   * The set of Plaid Check Item updates for the Link session.
   * @return craUpdateResults
  **/
  @ApiModelProperty(required = true, value = "The set of Plaid Check Item updates for the Link session.")

  public List<LinkSessionCraUpdateResult> getCraUpdateResults() {
    return craUpdateResults;
  }


  public void setCraUpdateResults(List<LinkSessionCraUpdateResult> craUpdateResults) {
    this.craUpdateResults = craUpdateResults;
  }


  public LinkSessionResults bankIncomeResults(List<LinkSessionBankIncomeResult> bankIncomeResults) {
    
    this.bankIncomeResults = bankIncomeResults;
    return this;
  }

  public LinkSessionResults addBankIncomeResultsItem(LinkSessionBankIncomeResult bankIncomeResultsItem) {
    this.bankIncomeResults.add(bankIncomeResultsItem);
    return this;
  }

   /**
   * The set of bank income verifications for the Link session.
   * @return bankIncomeResults
  **/
  @ApiModelProperty(required = true, value = "The set of bank income verifications for the Link session.")

  public List<LinkSessionBankIncomeResult> getBankIncomeResults() {
    return bankIncomeResults;
  }


  public void setBankIncomeResults(List<LinkSessionBankIncomeResult> bankIncomeResults) {
    this.bankIncomeResults = bankIncomeResults;
  }


  public LinkSessionResults payrollIncomeResults(List<LinkSessionPayrollIncomeResult> payrollIncomeResults) {
    
    this.payrollIncomeResults = payrollIncomeResults;
    return this;
  }

  public LinkSessionResults addPayrollIncomeResultsItem(LinkSessionPayrollIncomeResult payrollIncomeResultsItem) {
    this.payrollIncomeResults.add(payrollIncomeResultsItem);
    return this;
  }

   /**
   * The set of payroll income verifications for the Link session.
   * @return payrollIncomeResults
  **/
  @ApiModelProperty(required = true, value = "The set of payroll income verifications for the Link session.")

  public List<LinkSessionPayrollIncomeResult> getPayrollIncomeResults() {
    return payrollIncomeResults;
  }


  public void setPayrollIncomeResults(List<LinkSessionPayrollIncomeResult> payrollIncomeResults) {
    this.payrollIncomeResults = payrollIncomeResults;
  }


  public LinkSessionResults documentIncomeResults(CreditSessionDocumentIncomeResult documentIncomeResults) {
    
    this.documentIncomeResults = documentIncomeResults;
    return this;
  }

   /**
   * Get documentIncomeResults
   * @return documentIncomeResults
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(required = true, value = "")

  public CreditSessionDocumentIncomeResult getDocumentIncomeResults() {
    return documentIncomeResults;
  }


  public void setDocumentIncomeResults(CreditSessionDocumentIncomeResult documentIncomeResults) {
    this.documentIncomeResults = documentIncomeResults;
  }


  public LinkSessionResults craDocumentUploadResults(LinkSessionCraDocumentUploadResult craDocumentUploadResults) {
    
    this.craDocumentUploadResults = craDocumentUploadResults;
    return this;
  }

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

  public LinkSessionCraDocumentUploadResult getCraDocumentUploadResults() {
    return craDocumentUploadResults;
  }


  public void setCraDocumentUploadResults(LinkSessionCraDocumentUploadResult craDocumentUploadResults) {
    this.craDocumentUploadResults = craDocumentUploadResults;
  }


  public LinkSessionResults protectResults(LinkSessionProtectResult protectResults) {
    
    this.protectResults = protectResults;
    return this;
  }

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

  public LinkSessionProtectResult getProtectResults() {
    return protectResults;
  }


  public void setProtectResults(LinkSessionProtectResult protectResults) {
    this.protectResults = protectResults;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    LinkSessionResults linkSessionResults = (LinkSessionResults) o;
    return Objects.equals(this.itemAddResults, linkSessionResults.itemAddResults) &&
        Objects.equals(this.craItemAddResults, linkSessionResults.craItemAddResults) &&
        Objects.equals(this.craUpdateResults, linkSessionResults.craUpdateResults) &&
        Objects.equals(this.bankIncomeResults, linkSessionResults.bankIncomeResults) &&
        Objects.equals(this.payrollIncomeResults, linkSessionResults.payrollIncomeResults) &&
        Objects.equals(this.documentIncomeResults, linkSessionResults.documentIncomeResults) &&
        Objects.equals(this.craDocumentUploadResults, linkSessionResults.craDocumentUploadResults) &&
        Objects.equals(this.protectResults, linkSessionResults.protectResults);
  }

  @Override
  public int hashCode() {
    return Objects.hash(itemAddResults, craItemAddResults, craUpdateResults, bankIncomeResults, payrollIncomeResults, documentIncomeResults, craDocumentUploadResults, protectResults);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class LinkSessionResults {\n");
    sb.append("    itemAddResults: ").append(toIndentedString(itemAddResults)).append("\n");
    sb.append("    craItemAddResults: ").append(toIndentedString(craItemAddResults)).append("\n");
    sb.append("    craUpdateResults: ").append(toIndentedString(craUpdateResults)).append("\n");
    sb.append("    bankIncomeResults: ").append(toIndentedString(bankIncomeResults)).append("\n");
    sb.append("    payrollIncomeResults: ").append(toIndentedString(payrollIncomeResults)).append("\n");
    sb.append("    documentIncomeResults: ").append(toIndentedString(documentIncomeResults)).append("\n");
    sb.append("    craDocumentUploadResults: ").append(toIndentedString(craDocumentUploadResults)).append("\n");
    sb.append("    protectResults: ").append(toIndentedString(protectResults)).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    ");
  }

}

