content: /*
   * Management API
   *
   * The version of the OpenAPI document: 3
   *
   *
   * 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.management;
  
  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 java.util.*;
  import java.util.Arrays;
  import java.util.logging.Logger;
  
  /** PayoutSettings */
  @JsonPropertyOrder({
    PayoutSettings.JSON_PROPERTY_ALLOWED,
    PayoutSettings.JSON_PROPERTY_ENABLED,
    PayoutSettings.JSON_PROPERTY_ENABLED_FROM_DATE,
    PayoutSettings.JSON_PROPERTY_ID,
    PayoutSettings.JSON_PROPERTY_PRIORITY,
    PayoutSettings.JSON_PROPERTY_TRANSFER_INSTRUMENT_ID,
    PayoutSettings.JSON_PROPERTY_VERIFICATION_STATUS
  })
  public class PayoutSettings {
    public static final String JSON_PROPERTY_ALLOWED = "allowed";
    private Boolean allowed;
  
    public static final String JSON_PROPERTY_ENABLED = "enabled";
    private Boolean enabled;
  
    public static final String JSON_PROPERTY_ENABLED_FROM_DATE = "enabledFromDate";
    private String enabledFromDate;
  
    public static final String JSON_PROPERTY_ID = "id";
    private String id;
  
    /**
     * Determines how long it takes for the funds to reach the bank account. Adyen pays out based on
     * the [payout frequency](https://docs.adyen.com/account/getting-paid#payout-frequency). Depending
     * on the currencies and banks involved in transferring the money, it may take up to three days
     * for the payout funds to arrive in the bank account. Possible values: * **first**: same day. *
     * **urgent**: the next day. * **normal**: between 1 and 3 days.
     */
    public enum PriorityEnum {
      FIRST(String.valueOf("first")),
  
      NORMAL(String.valueOf("normal")),
  
      URGENT(String.valueOf("urgent"));
  
      private static final Logger LOG = Logger.getLogger(PriorityEnum.class.getName());
  
      private String value;
  
      PriorityEnum(String value) {
        this.value = value;
      }
  
      @JsonValue
      public String getValue() {
        return value;
      }
  
      @Override
      public String toString() {
        return String.valueOf(value);
      }
  
      @JsonCreator
      public static PriorityEnum fromValue(String value) {
        for (PriorityEnum b : PriorityEnum.values()) {
          if (b.value.equals(value)) {
            return b;
          }
        }
        // handling unexpected value
        LOG.warning(
            "PriorityEnum: unexpected enum value '"
                + value
                + "' - Supported values are "
                + Arrays.toString(PriorityEnum.values()));
        return null;
      }
    }
  
    public static final String JSON_PROPERTY_PRIORITY = "priority";
    private PriorityEnum priority;
  
    public static final String JSON_PROPERTY_TRANSFER_INSTRUMENT_ID = "transferInstrumentId";
    private String transferInstrumentId;
  
    /**
     * The status of the verification process for the bank account. Possible values: * **valid**: the
     * verification was successful. * **pending**: the verification is in progress. * **invalid**: the
     * information provided is not complete. * **rejected**: there are reasons to refuse working with
     * this entity.
     */
    public enum VerificationStatusEnum {
      INVALID(String.valueOf("invalid")),
  
      PENDING(String.valueOf("pending")),
  
      REJECTED(String.valueOf("rejected")),
  
      VALID(String.valueOf("valid"));
  
      private static final Logger LOG = Logger.getLogger(VerificationStatusEnum.class.getName());
  
      private String value;
  
      VerificationStatusEnum(String value) {
        this.value = value;
      }
  
      @JsonValue
      public String getValue() {
        return value;
      }
  
      @Override
      public String toString() {
        return String.valueOf(value);
      }
  
      @JsonCreator
      public static VerificationStatusEnum fromValue(String value) {
        for (VerificationStatusEnum b : VerificationStatusEnum.values()) {
          if (b.value.equals(value)) {
            return b;
          }
        }
        // handling unexpected value
        LOG.warning(
            "VerificationStatusEnum: unexpected enum value '"
                + value
                + "' - Supported values are "
                + Arrays.toString(VerificationStatusEnum.values()));
        return null;
      }
    }
  
    public static final String JSON_PROPERTY_VERIFICATION_STATUS = "verificationStatus";
    private VerificationStatusEnum verificationStatus;
  
    public PayoutSettings() {}
  
    /**
     * Indicates if payouts to the bank account are allowed. This value is set automatically based on
     * the status of the verification process. The value is: * **true** if
     * &#x60;verificationStatus&#x60; is **valid**. * **false** for all other values.
     *
     * @param allowed Indicates if payouts to the bank account are allowed. This value is set
     *     automatically based on the status of the verification process. The value is: * **true** if
     *     &#x60;verificationStatus&#x60; is **valid**. * **false** for all other values.
     * @return the current {@code PayoutSettings} instance, allowing for method chaining
     */
    public PayoutSettings allowed(Boolean allowed) {
      this.allowed = allowed;
      return this;
    }
  
    /**
     * Indicates if payouts to the bank account are allowed. This value is set automatically based on
     * the status of the verification process. The value is: * **true** if
     * &#x60;verificationStatus&#x60; is **valid**. * **false** for all other values.
     *
     * @return allowed Indicates if payouts to the bank account are allowed. This value is set
     *     automatically based on the status of the verification process. The value is: * **true** if
     *     &#x60;verificationStatus&#x60; is **valid**. * **false** for all other values.
     */
    @JsonProperty(JSON_PROPERTY_ALLOWED)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public Boolean getAllowed() {
      return allowed;
    }
  
    /**
     * Indicates if payouts to the bank account are allowed. This value is set automatically based on
     * the status of the verification process. The value is: * **true** if
     * &#x60;verificationStatus&#x60; is **valid**. * **false** for all other values.
     *
     * @param allowed Indicates if payouts to the bank account are allowed. This value is set
     *     automatically based on the status of the verification process. The value is: * **true** if
     *     &#x60;verificationStatus&#x60; is **valid**. * **false** for all other values.
     */
    @JsonProperty(JSON_PROPERTY_ALLOWED)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setAllowed(Boolean allowed) {
      this.allowed = allowed;
    }
  
    /**
     * Indicates if payouts to this bank account are enabled. Default: **true**. To receive payouts
     * into this bank account, both &#x60;enabled&#x60; and &#x60;allowed&#x60; must be **true**.
     *
     * @param enabled Indicates if payouts to this bank account are enabled. Default: **true**. To
     *     receive payouts into this bank account, both &#x60;enabled&#x60; and &#x60;allowed&#x60;
     *     must be **true**.
     * @return the current {@code PayoutSettings} instance, allowing for method chaining
     */
    public PayoutSettings enabled(Boolean enabled) {
      this.enabled = enabled;
      return this;
    }
  
    /**
     * Indicates if payouts to this bank account are enabled. Default: **true**. To receive payouts
     * into this bank account, both &#x60;enabled&#x60; and &#x60;allowed&#x60; must be **true**.
     *
     * @return enabled Indicates if payouts to this bank account are enabled. Default: **true**. To
     *     receive payouts into this bank account, both &#x60;enabled&#x60; and &#x60;allowed&#x60;
     *     must be **true**.
     */
    @JsonProperty(JSON_PROPERTY_ENABLED)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public Boolean getEnabled() {
      return enabled;
    }
  
    /**
     * Indicates if payouts to this bank account are enabled. Default: **true**. To receive payouts
     * into this bank account, both &#x60;enabled&#x60; and &#x60;allowed&#x60; must be **true**.
     *
     * @param enabled Indicates if payouts to this bank account are enabled. Default: **true**. To
     *     receive payouts into this bank account, both &#x60;enabled&#x60; and &#x60;allowed&#x60;
     *     must be **true**.
     */
    @JsonProperty(JSON_PROPERTY_ENABLED)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setEnabled(Boolean enabled) {
      this.enabled = enabled;
    }
  
    /**
     * The date when Adyen starts paying out to this bank account. Format: [ISO
     * 8601](https://www.w3.org/TR/NOTE-datetime), for example, **2019-11-23T12:25:28Z** or
     * **2020-05-27T20:25:28+08:00**. If not specified, the &#x60;enabled&#x60; field indicates if
     * payouts are enabled for this bank account. If a date is specified and: * &#x60;enabled&#x60;:
     * **true**, payouts are enabled starting the specified date. * &#x60;enabled&#x60;: **false**,
     * payouts are disabled until the specified date. On the specified date, &#x60;enabled&#x60;
     * changes to **true** and this field is reset to **null**.
     *
     * @param enabledFromDate The date when Adyen starts paying out to this bank account. Format: [ISO
     *     8601](https://www.w3.org/TR/NOTE-datetime), for example, **2019-11-23T12:25:28Z** or
     *     **2020-05-27T20:25:28+08:00**. If not specified, the &#x60;enabled&#x60; field indicates if
     *     payouts are enabled for this bank account. If a date is specified and: *
     *     &#x60;enabled&#x60;: **true**, payouts are enabled starting the specified date. *
     *     &#x60;enabled&#x60;: **false**, payouts are disabled until the specified date. On the
     *     specified date, &#x60;enabled&#x60; changes to **true** and this field is reset to
     *     **null**.
     * @return the current {@code PayoutSettings} instance, allowing for method chaining
     */
    public PayoutSettings enabledFromDate(String enabledFromDate) {
      this.enabledFromDate = enabledFromDate;
      return this;
    }
  
    /**
     * The date when Adyen starts paying out to this bank account. Format: [ISO
     * 8601](https://www.w3.org/TR/NOTE-datetime), for example, **2019-11-23T12:25:28Z** or
     * **2020-05-27T20:25:28+08:00**. If not specified, the &#x60;enabled&#x60; field indicates if
     * payouts are enabled for this bank account. If a date is specified and: * &#x60;enabled&#x60;:
     * **true**, payouts are enabled starting the specified date. * &#x60;enabled&#x60;: **false**,
     * payouts are disabled until the specified date. On the specified date, &#x60;enabled&#x60;
     * changes to **true** and this field is reset to **null**.
     *
     * @return enabledFromDate The date when Adyen starts paying out to this bank account. Format:
     *     [ISO 8601](https://www.w3.org/TR/NOTE-datetime), for example, **2019-11-23T12:25:28Z** or
     *     **2020-05-27T20:25:28+08:00**. If not specified, the &#x60;enabled&#x60; field indicates if
     *     payouts are enabled for this bank account. If a date is specified and: *
     *     &#x60;enabled&#x60;: **true**, payouts are enabled starting the specified date. *
     *     &#x60;enabled&#x60;: **false**, payouts are disabled until the specified date. On the
     *     specified date, &#x60;enabled&#x60; changes to **true** and this field is reset to
     *     **null**.
     */
    @JsonProperty(JSON_PROPERTY_ENABLED_FROM_DATE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getEnabledFromDate() {
      return enabledFromDate;
    }
  
    /**
     * The date when Adyen starts paying out to this bank account. Format: [ISO
     * 8601](https://www.w3.org/TR/NOTE-datetime), for example, **2019-11-23T12:25:28Z** or
     * **2020-05-27T20:25:28+08:00**. If not specified, the &#x60;enabled&#x60; field indicates if
     * payouts are enabled for this bank account. If a date is specified and: * &#x60;enabled&#x60;:
     * **true**, payouts are enabled starting the specified date. * &#x60;enabled&#x60;: **false**,
     * payouts are disabled until the specified date. On the specified date, &#x60;enabled&#x60;
     * changes to **true** and this field is reset to **null**.
     *
     * @param enabledFromDate The date when Adyen starts paying out to this bank account. Format: [ISO
     *     8601](https://www.w3.org/TR/NOTE-datetime), for example, **2019-11-23T12:25:28Z** or
     *     **2020-05-27T20:25:28+08:00**. If not specified, the &#x60;enabled&#x60; field indicates if
     *     payouts are enabled for this bank account. If a date is specified and: *
     *     &#x60;enabled&#x60;: **true**, payouts are enabled starting the specified date. *
     *     &#x60;enabled&#x60;: **false**, payouts are disabled until the specified date. On the
     *     specified date, &#x60;enabled&#x60; changes to **true** and this field is reset to
     *     **null**.
     */
    @JsonProperty(JSON_PROPERTY_ENABLED_FROM_DATE)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setEnabledFromDate(String enabledFromDate) {
      this.enabledFromDate = enabledFromDate;
    }
  
    /**
     * The unique identifier of the payout setting.
     *
     * @param id The unique identifier of the payout setting.
     * @return the current {@code PayoutSettings} instance, allowing for method chaining
     */
    public PayoutSettings id(String id) {
      this.id = id;
      return this;
    }
  
    /**
     * The unique identifier of the payout setting.
     *
     * @return id The unique identifier of the payout setting.
     */
    @JsonProperty(JSON_PROPERTY_ID)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getId() {
      return id;
    }
  
    /**
     * The unique identifier of the payout setting.
     *
     * @param id The unique identifier of the payout setting.
     */
    @JsonProperty(JSON_PROPERTY_ID)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setId(String id) {
      this.id = id;
    }
  
    /**
     * Determines how long it takes for the funds to reach the bank account. Adyen pays out based on
     * the [payout frequency](https://docs.adyen.com/account/getting-paid#payout-frequency). Depending
     * on the currencies and banks involved in transferring the money, it may take up to three days
     * for the payout funds to arrive in the bank account. Possible values: * **first**: same day. *
     * **urgent**: the next day. * **normal**: between 1 and 3 days.
     *
     * @param priority Determines how long it takes for the funds to reach the bank account. Adyen
     *     pays out based on the [payout
     *     frequency](https://docs.adyen.com/account/getting-paid#payout-frequency). Depending on the
     *     currencies and banks involved in transferring the money, it may take up to three days for
     *     the payout funds to arrive in the bank account. Possible values: * **first**: same day. *
     *     **urgent**: the next day. * **normal**: between 1 and 3 days.
     * @return the current {@code PayoutSettings} instance, allowing for method chaining
     */
    public PayoutSettings priority(PriorityEnum priority) {
      this.priority = priority;
      return this;
    }
  
    /**
     * Determines how long it takes for the funds to reach the bank account. Adyen pays out based on
     * the [payout frequency](https://docs.adyen.com/account/getting-paid#payout-frequency). Depending
     * on the currencies and banks involved in transferring the money, it may take up to three days
     * for the payout funds to arrive in the bank account. Possible values: * **first**: same day. *
     * **urgent**: the next day. * **normal**: between 1 and 3 days.
     *
     * @return priority Determines how long it takes for the funds to reach the bank account. Adyen
     *     pays out based on the [payout
     *     frequency](https://docs.adyen.com/account/getting-paid#payout-frequency). Depending on the
     *     currencies and banks involved in transferring the money, it may take up to three days for
     *     the payout funds to arrive in the bank account. Possible values: * **first**: same day. *
     *     **urgent**: the next day. * **normal**: between 1 and 3 days.
     */
    @JsonProperty(JSON_PROPERTY_PRIORITY)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public PriorityEnum getPriority() {
      return priority;
    }
  
    /**
     * Determines how long it takes for the funds to reach the bank account. Adyen pays out based on
     * the [payout frequency](https://docs.adyen.com/account/getting-paid#payout-frequency). Depending
     * on the currencies and banks involved in transferring the money, it may take up to three days
     * for the payout funds to arrive in the bank account. Possible values: * **first**: same day. *
     * **urgent**: the next day. * **normal**: between 1 and 3 days.
     *
     * @param priority Determines how long it takes for the funds to reach the bank account. Adyen
     *     pays out based on the [payout
     *     frequency](https://docs.adyen.com/account/getting-paid#payout-frequency). Depending on the
     *     currencies and banks involved in transferring the money, it may take up to three days for
     *     the payout funds to arrive in the bank account. Possible values: * **first**: same day. *
     *     **urgent**: the next day. * **normal**: between 1 and 3 days.
     */
    @JsonProperty(JSON_PROPERTY_PRIORITY)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setPriority(PriorityEnum priority) {
      this.priority = priority;
    }
  
    /**
     * The unique identifier of the [transfer
     * instrument](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/transferInstruments)
     * that contains the details of the bank account.
     *
     * @param transferInstrumentId The unique identifier of the [transfer
     *     instrument](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/transferInstruments)
     *     that contains the details of the bank account.
     * @return the current {@code PayoutSettings} instance, allowing for method chaining
     */
    public PayoutSettings transferInstrumentId(String transferInstrumentId) {
      this.transferInstrumentId = transferInstrumentId;
      return this;
    }
  
    /**
     * The unique identifier of the [transfer
     * instrument](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/transferInstruments)
     * that contains the details of the bank account.
     *
     * @return transferInstrumentId The unique identifier of the [transfer
     *     instrument](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/transferInstruments)
     *     that contains the details of the bank account.
     */
    @JsonProperty(JSON_PROPERTY_TRANSFER_INSTRUMENT_ID)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public String getTransferInstrumentId() {
      return transferInstrumentId;
    }
  
    /**
     * The unique identifier of the [transfer
     * instrument](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/transferInstruments)
     * that contains the details of the bank account.
     *
     * @param transferInstrumentId The unique identifier of the [transfer
     *     instrument](https://docs.adyen.com/api-explorer/#/legalentity/latest/post/transferInstruments)
     *     that contains the details of the bank account.
     */
    @JsonProperty(JSON_PROPERTY_TRANSFER_INSTRUMENT_ID)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setTransferInstrumentId(String transferInstrumentId) {
      this.transferInstrumentId = transferInstrumentId;
    }
  
    /**
     * The status of the verification process for the bank account. Possible values: * **valid**: the
     * verification was successful. * **pending**: the verification is in progress. * **invalid**: the
     * information provided is not complete. * **rejected**: there are reasons to refuse working with
     * this entity.
     *
     * @param verificationStatus The status of the verification process for the bank account. Possible
     *     values: * **valid**: the verification was successful. * **pending**: the verification is in
     *     progress. * **invalid**: the information provided is not complete. * **rejected**: there
     *     are reasons to refuse working with this entity.
     * @return the current {@code PayoutSettings} instance, allowing for method chaining
     */
    public PayoutSettings verificationStatus(VerificationStatusEnum verificationStatus) {
      this.verificationStatus = verificationStatus;
      return this;
    }
  
    /**
     * The status of the verification process for the bank account. Possible values: * **valid**: the
     * verification was successful. * **pending**: the verification is in progress. * **invalid**: the
     * information provided is not complete. * **rejected**: there are reasons to refuse working with
     * this entity.
     *
     * @return verificationStatus The status of the verification process for the bank account.
     *     Possible values: * **valid**: the verification was successful. * **pending**: the
     *     verification is in progress. * **invalid**: the information provided is not complete. *
     *     **rejected**: there are reasons to refuse working with this entity.
     */
    @JsonProperty(JSON_PROPERTY_VERIFICATION_STATUS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public VerificationStatusEnum getVerificationStatus() {
      return verificationStatus;
    }
  
    /**
     * The status of the verification process for the bank account. Possible values: * **valid**: the
     * verification was successful. * **pending**: the verification is in progress. * **invalid**: the
     * information provided is not complete. * **rejected**: there are reasons to refuse working with
     * this entity.
     *
     * @param verificationStatus The status of the verification process for the bank account. Possible
     *     values: * **valid**: the verification was successful. * **pending**: the verification is in
     *     progress. * **invalid**: the information provided is not complete. * **rejected**: there
     *     are reasons to refuse working with this entity.
     */
    @JsonProperty(JSON_PROPERTY_VERIFICATION_STATUS)
    @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
    public void setVerificationStatus(VerificationStatusEnum verificationStatus) {
      this.verificationStatus = verificationStatus;
    }
  
    /** Return true if this PayoutSettings object is equal to o. */
    @Override
    public boolean equals(Object o) {
      if (this == o) {
        return true;
      }
      if (o == null || getClass() != o.getClass()) {
        return false;
      }
      PayoutSettings payoutSettings = (PayoutSettings) o;
      return Objects.equals(this.allowed, payoutSettings.allowed)
          && Objects.equals(this.enabled, payoutSettings.enabled)
          && Objects.equals(this.enabledFromDate, payoutSettings.enabledFromDate)
          && Objects.equals(this.id, payoutSettings.id)
          && Objects.equals(this.priority, payoutSettings.priority)
          && Objects.equals(this.transferInstrumentId, payoutSettings.transferInstrumentId)
          && Objects.equals(this.verificationStatus, payoutSettings.verificationStatus);
    }
  
    @Override
    public int hashCode() {
      return Objects.hash(
          allowed, enabled, enabledFromDate, id, priority, transferInstrumentId, verificationStatus);
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append("class PayoutSettings {\n");
      sb.append("    allowed: ").append(toIndentedString(allowed)).append("\n");
      sb.append("    enabled: ").append(toIndentedString(enabled)).append("\n");
      sb.append("    enabledFromDate: ").append(toIndentedString(enabledFromDate)).append("\n");
      sb.append("    id: ").append(toIndentedString(id)).append("\n");
      sb.append("    priority: ").append(toIndentedString(priority)).append("\n");
      sb.append("    transferInstrumentId: ")
          .append(toIndentedString(transferInstrumentId))
          .append("\n");
      sb.append("    verificationStatus: ").append(toIndentedString(verificationStatus)).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 PayoutSettings given an JSON string
     *
     * @param jsonString JSON string
     * @return An instance of PayoutSettings
     * @throws JsonProcessingException if the JSON string is invalid with respect to PayoutSettings
     */
    public static PayoutSettings fromJson(String jsonString) throws JsonProcessingException {
      return JSON.getMapper().readValue(jsonString, PayoutSettings.class);
    }
  
    /**
     * Convert an instance of PayoutSettings to an JSON string
     *
     * @return JSON string
     */
    public String toJson() throws JsonProcessingException {
      return JSON.getMapper().writeValueAsString(this);
    }
  }
  