content: /*
   * Account API
   * This API is used for the classic integration. If you are just starting your implementation, refer to our [new integration guide](https://docs.adyen.com/marketplaces-and-platforms) instead.  The Account API provides endpoints for managing account-related entities on your platform. These related entities include account holders, accounts, bank accounts, shareholders, and verification-related documents. The management operations include actions such as creation, retrieval, updating, and deletion of them.  For more information, refer to our [documentation](https://docs.adyen.com/marketplaces-and-platforms/classic). ## Authentication Your Adyen contact will provide your API credential and an API key. To connect to the API, add an `X-API-Key` header with the API key as the value, for example:   ``` curl -H \"Content-Type: application/json\" \\ -H \"X-API-Key: YOUR_API_KEY\" \\ ... ```  Alternatively, you can use the username and password to connect to the API using basic authentication. For example:  ``` curl -U \"ws@MarketPlace.YOUR_PLATFORM_ACCOUNT\":\"YOUR_WS_PASSWORD\" \\ -H \"Content-Type: application/json\" \\ ... ``` When going live, you need to generate new web service user credentials to access the [live endpoints](https://docs.adyen.com/development-resources/live-endpoints).  ## Versioning The Account API supports [versioning](https://docs.adyen.com/development-resources/versioning) using a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.  For example: ``` https://cal-test.adyen.com/cal/services/Account/v6/createAccountHolder ```
   *
   * The version of the OpenAPI document: 6
   *
   *
   * 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.adyen.model.marketpayaccount;
  
  import com.fasterxml.jackson.annotation.JsonCreator;
  import com.fasterxml.jackson.annotation.JsonInclude;
  import com.fasterxml.jackson.annotation.JsonProperty;
  import com.fasterxml.jackson.annotation.JsonPropertyOrder;
  import com.fasterxml.jackson.annotation.JsonValue;
  import com.fasterxml.jackson.core.JsonProcessingException;
  import io.swagger.annotations.ApiModelProperty;
  import java.util.Objects;
  
  /** UpdateAccountHolderRequest */
  @JsonPropertyOrder({
    UpdateAccountHolderRequest.JSON_PROPERTY_ACCOUNT_HOLDER_CODE,
    UpdateAccountHolderRequest.JSON_PROPERTY_ACCOUNT_HOLDER_DETAILS,
    UpdateAccountHolderRequest.JSON_PROPERTY_DESCRIPTION,
    UpdateAccountHolderRequest.JSON_PROPERTY_LEGAL_ENTITY,
    UpdateAccountHolderRequest.JSON_PROPERTY_PRIMARY_CURRENCY,
    UpdateAccountHolderRequest.JSON_PROPERTY_PROCESSING_TIER,
    UpdateAccountHolderRequest.JSON_PROPERTY_VERIFICATION_PROFILE
  })
  public class UpdateAccountHolderRequest {
    public static final String JSON_PROPERTY_ACCOUNT_HOLDER_CODE = "accountHolderCode";
    private String accountHolderCode;
  
    public static final String JSON_PROPERTY_ACCOUNT_HOLDER_DETAILS = "accountHolderDetails";
    private AccountHolderDetails accountHolderDetails;
  
    public static final String JSON_PROPERTY_DESCRIPTION = "description";
    private String description;
  
    /**
     * The legal entity type of the account holder. This determines the information that should be
     * provided in the request. Possible values: **Business**, **Individual**, or **NonProfit**. * If
     * set to **Business** or **NonProfit**, then &#x60;accountHolderDetails.businessDetails&#x60;
     * must be provided, with at least one entry in the
     * &#x60;accountHolderDetails.businessDetails.shareholders&#x60; list. * If set to **Individual**,
     * then &#x60;accountHolderDetails.individualDetails&#x60; must be provided.
     */
    public enum LegalEntityEnum {
      BUSINESS("Business"),
  
      INDIVIDUAL("Individual"),
  
      NONPROFIT("NonProfit"),
  
      PARTNERSHIP("Partnership"),
  
      PUBLICCOMPANY("PublicCompany");
  
      private String value;
  
      LegalEntityEnum(String value) {
        this.value = value;
      }
  
      @JsonValue
      public String getValue() {
        return value;
      }
  
      @Override
      public String toString() {
        return String.valueOf(value);
      }
  
      @JsonCreator
      public static LegalEntityEnum fromValue(String value) {
        for (LegalEntityEnum b : LegalEntityEnum.values()) {
          if (b.value.equals(value)) {
            return b;
          }
        }
        throw new IllegalArgumentException("Unexpected value '" + value + "'");
      }
    }
  
    public static final String JSON_PROPERTY_LEGAL_ENTITY = "legalEntity";
    private LegalEntityEnum legalEntity;
  
    public static final String JSON_PROPERTY_PRIMARY_CURRENCY = "primaryCurrency";
    private String primaryCurrency;
  
    public static final String JSON_PROPERTY_PROCESSING_TIER = "processingTier";
    private Integer processingTier;
  
    public static final String JSON_PROPERTY_VERIFICATION_PROFILE = "verificationProfile";
    private String verificationProfile;
  
    public UpdateAccountHolderRequest() {}
  
    public UpdateAccountHolderRequest accountHolderCode(String accountHolderCode) {
      this.accountHolderCode = accountHolderCode;
      return this;
    }
  
    /**
     * The code of the Account Holder to be updated.
     *
     * @return accountHolderCode
     */
    @ApiModelProperty(required = true, value = "The code of the Account Holder to be updated.")
    @JsonProperty(JSON_PROPERTY_ACCOUNT_HOLDER_CODE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getAccountHolderCode() {
      return accountHolderCode;
    }
  
    @JsonProperty(JSON_PROPERTY_ACCOUNT_HOLDER_CODE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setAccountHolderCode(String accountHolderCode) {
      this.accountHolderCode = accountHolderCode;
    }
  
    public UpdateAccountHolderRequest accountHolderDetails(
        AccountHolderDetails accountHolderDetails) {
      this.accountHolderDetails = accountHolderDetails;
      return this;
    }
  
    /**
     * Get accountHolderDetails
     *
     * @return accountHolderDetails
     */
    @ApiModelProperty(value = "")
    @JsonProperty(JSON_PROPERTY_ACCOUNT_HOLDER_DETAILS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public AccountHolderDetails getAccountHolderDetails() {
      return accountHolderDetails;
    }
  
    @JsonProperty(JSON_PROPERTY_ACCOUNT_HOLDER_DETAILS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setAccountHolderDetails(AccountHolderDetails accountHolderDetails) {
      this.accountHolderDetails = accountHolderDetails;
    }
  
    public UpdateAccountHolderRequest description(String description) {
      this.description = description;
      return this;
    }
  
    /**
     * A description of the account holder, maximum 256 characters. You can use alphanumeric
     * characters (A-Z, a-z, 0-9), white spaces, and underscores &#x60;_&#x60;.
     *
     * @return description
     */
    @ApiModelProperty(
        value =
            "A description of the account holder, maximum 256 characters. You can use alphanumeric characters (A-Z, a-z, 0-9), white spaces, and underscores `_`.")
    @JsonProperty(JSON_PROPERTY_DESCRIPTION)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getDescription() {
      return description;
    }
  
    @JsonProperty(JSON_PROPERTY_DESCRIPTION)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setDescription(String description) {
      this.description = description;
    }
  
    public UpdateAccountHolderRequest legalEntity(LegalEntityEnum legalEntity) {
      this.legalEntity = legalEntity;
      return this;
    }
  
    /**
     * The legal entity type of the account holder. This determines the information that should be
     * provided in the request. Possible values: **Business**, **Individual**, or **NonProfit**. * If
     * set to **Business** or **NonProfit**, then &#x60;accountHolderDetails.businessDetails&#x60;
     * must be provided, with at least one entry in the
     * &#x60;accountHolderDetails.businessDetails.shareholders&#x60; list. * If set to **Individual**,
     * then &#x60;accountHolderDetails.individualDetails&#x60; must be provided.
     *
     * @return legalEntity
     */
    @ApiModelProperty(
        value =
            "The legal entity type of the account holder. This determines the information that should be provided in the request.  Possible values: **Business**, **Individual**, or **NonProfit**.  * If set to **Business** or **NonProfit**, then `accountHolderDetails.businessDetails` must be provided, with at least one entry in the `accountHolderDetails.businessDetails.shareholders` list.  * If set to **Individual**, then `accountHolderDetails.individualDetails` must be provided.")
    @JsonProperty(JSON_PROPERTY_LEGAL_ENTITY)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public LegalEntityEnum getLegalEntity() {
      return legalEntity;
    }
  
    @JsonProperty(JSON_PROPERTY_LEGAL_ENTITY)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setLegalEntity(LegalEntityEnum legalEntity) {
      this.legalEntity = legalEntity;
    }
  
    public UpdateAccountHolderRequest primaryCurrency(String primaryCurrency) {
      this.primaryCurrency = primaryCurrency;
      return this;
    }
  
    /**
     * The primary three-character [ISO currency
     * code](https://docs.adyen.com/development-resources/currency-codes), to which the account holder
     * should be updated.
     *
     * @return primaryCurrency
     * @deprecated
     */
    @Deprecated
    @ApiModelProperty(
        value =
            "The primary three-character [ISO currency code](https://docs.adyen.com/development-resources/currency-codes), to which the account holder should be updated.")
    @JsonProperty(JSON_PROPERTY_PRIMARY_CURRENCY)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getPrimaryCurrency() {
      return primaryCurrency;
    }
  
    @Deprecated
    @JsonProperty(JSON_PROPERTY_PRIMARY_CURRENCY)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPrimaryCurrency(String primaryCurrency) {
      this.primaryCurrency = primaryCurrency;
    }
  
    public UpdateAccountHolderRequest processingTier(Integer processingTier) {
      this.processingTier = processingTier;
      return this;
    }
  
    /**
     * The processing tier to which the Account Holder should be updated. &gt;The processing tier can
     * not be lowered through this request. &gt;Required if accountHolderDetails are not provided.
     *
     * @return processingTier
     */
    @ApiModelProperty(
        value =
            "The processing tier to which the Account Holder should be updated. >The processing tier can not be lowered through this request.  >Required if accountHolderDetails are not provided.")
    @JsonProperty(JSON_PROPERTY_PROCESSING_TIER)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public Integer getProcessingTier() {
      return processingTier;
    }
  
    @JsonProperty(JSON_PROPERTY_PROCESSING_TIER)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setProcessingTier(Integer processingTier) {
      this.processingTier = processingTier;
    }
  
    public UpdateAccountHolderRequest verificationProfile(String verificationProfile) {
      this.verificationProfile = verificationProfile;
      return this;
    }
  
    /**
     * The identifier of the profile that applies to this entity.
     *
     * @return verificationProfile
     */
    @ApiModelProperty(value = "The identifier of the profile that applies to this entity.")
    @JsonProperty(JSON_PROPERTY_VERIFICATION_PROFILE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getVerificationProfile() {
      return verificationProfile;
    }
  
    @JsonProperty(JSON_PROPERTY_VERIFICATION_PROFILE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setVerificationProfile(String verificationProfile) {
      this.verificationProfile = verificationProfile;
    }
  
    /** Return true if this UpdateAccountHolderRequest object is equal to o. */
    @Override
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      UpdateAccountHolderRequest updateAccountHolderRequest = (UpdateAccountHolderRequest) o;
      return Objects.equals(this.accountHolderCode, updateAccountHolderRequest.accountHolderCode)
          && Objects.equals(
              this.accountHolderDetails, updateAccountHolderRequest.accountHolderDetails)
          && Objects.equals(this.description, updateAccountHolderRequest.description)
          && Objects.equals(this.legalEntity, updateAccountHolderRequest.legalEntity)
          && Objects.equals(this.primaryCurrency, updateAccountHolderRequest.primaryCurrency)
          && Objects.equals(this.processingTier, updateAccountHolderRequest.processingTier)
          && Objects.equals(this.verificationProfile, updateAccountHolderRequest.verificationProfile);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(
          accountHolderCode,
          accountHolderDetails,
          description,
          legalEntity,
          primaryCurrency,
          processingTier,
          verificationProfile);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class UpdateAccountHolderRequest {\n");
      sb.append("    accountHolderCode: ").append(toIndentedString(accountHolderCode)).append("\n");
      sb.append("    accountHolderDetails: ")
          .append(toIndentedString(accountHolderDetails))
          .append("\n");
      sb.append("    description: ").append(toIndentedString(description)).append("\n");
      sb.append("    legalEntity: ").append(toIndentedString(legalEntity)).append("\n");
      sb.append("    primaryCurrency: ").append(toIndentedString(primaryCurrency)).append("\n");
      sb.append("    processingTier: ").append(toIndentedString(processingTier)).append("\n");
      sb.append("    verificationProfile: ")
          .append(toIndentedString(verificationProfile))
          .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    ");
    }
  
    /**
     * Create an instance of UpdateAccountHolderRequest given an JSON string
     *
     * @param jsonString JSON string
     * @return An instance of UpdateAccountHolderRequest
     * @throws JsonProcessingException if the JSON string is invalid with respect to
     *     UpdateAccountHolderRequest
     */
    public static UpdateAccountHolderRequest fromJson(String jsonString)
        throws JsonProcessingException {
      return JSON.getMapper().readValue(jsonString, UpdateAccountHolderRequest.class);
    }
  
    /**
     * Convert an instance of UpdateAccountHolderRequest to an JSON string
     *
     * @return JSON string
     */
    public String toJson() throws JsonProcessingException {
      return JSON.getMapper().writeValueAsString(this);
    }
  }
  