"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
# @generated-id: 08294e489fe8

from __future__ import annotations
from .creditor_bank_account import CreditorBankAccount, CreditorBankAccountTypedDict
from mollie.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL
import pydantic
from pydantic import model_serializer
from typing_extensions import Annotated, NotRequired, TypedDict


class VerificationOfPayeeRequestTypedDict(TypedDict):
    r"""The request body for performing a Verification of Payee (VoP) check. VoP allows you to verify the
    account holder name against the records held by the receiving bank before initiating a transfer.
    """

    creditor_bank_account: CreditorBankAccountTypedDict
    r"""The bank account details of the creditor (recipient) for Verification of Payee."""
    testmode: NotRequired[Nullable[bool]]
    r"""Whether to create the entity in test mode or live mode.

    Most API credentials are specifically created for either live mode or test mode, in which case this parameter must
    not be sent. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting
    `testmode` to `true`.
    """


class VerificationOfPayeeRequest(BaseModel):
    r"""The request body for performing a Verification of Payee (VoP) check. VoP allows you to verify the
    account holder name against the records held by the receiving bank before initiating a transfer.
    """

    creditor_bank_account: Annotated[
        CreditorBankAccount, pydantic.Field(alias="creditorBankAccount")
    ]
    r"""The bank account details of the creditor (recipient) for Verification of Payee."""

    testmode: OptionalNullable[bool] = UNSET
    r"""Whether to create the entity in test mode or live mode.

    Most API credentials are specifically created for either live mode or test mode, in which case this parameter must
    not be sent. For organization-level credentials such as OAuth access tokens, you can enable test mode by setting
    `testmode` to `true`.
    """

    @model_serializer(mode="wrap")
    def serialize_model(self, handler):
        optional_fields = set(["testmode"])
        nullable_fields = set(["testmode"])
        serialized = handler(self)
        m = {}

        for n, f in type(self).model_fields.items():
            k = f.alias or n
            val = serialized.get(k, serialized.get(n))
            is_nullable_and_explicitly_set = (
                k in nullable_fields
                and (self.__pydantic_fields_set__.intersection({n}))  # pylint: disable=no-member
            )

            if val != UNSET_SENTINEL:
                if (
                    val is not None
                    or k not in optional_fields
                    or is_nullable_and_explicitly_set
                ):
                    m[k] = val

        return m


try:
    VerificationOfPayeeRequest.model_rebuild()
except NameError:
    pass
