# This file was auto-generated by Fern from our API Definition.

import typing

import pydantic
import typing_extensions
from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from ...core.serialization import FieldMetadata


class TransferOutDetailPaymentData(UniversalBaseModel):
    """
    Payment data for an outbound transfer detail.
    """

    masked_account: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="MaskedAccount"),
        pydantic.Field(alias="MaskedAccount", description="Masked account number."),
    ] = None
    account_type: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="AccountType"),
        pydantic.Field(alias="AccountType", description="Type of account."),
    ] = None
    account_exp: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="AccountExp"),
        pydantic.Field(alias="AccountExp", description="Account expiration date."),
    ] = None
    account_zip: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="AccountZip"),
        pydantic.Field(alias="AccountZip", description="ZIP code associated with the account."),
    ] = None
    holder_name: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="HolderName"),
        pydantic.Field(alias="HolderName", description="Name of the account holder."),
    ] = None
    stored_id: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="StoredId"),
        pydantic.Field(alias="StoredId", description="ID of the stored payment method."),
    ] = None
    initiator: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="Initiator"),
        pydantic.Field(alias="Initiator", description="Initiator of the payment."),
    ] = None
    stored_method_usage_type: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="StoredMethodUsageType"),
        pydantic.Field(alias="StoredMethodUsageType", description="Usage type for stored method."),
    ] = None
    sequence: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="Sequence"),
        pydantic.Field(alias="Sequence", description="Sequence number."),
    ] = None
    order_description: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="orderDescription"),
        pydantic.Field(alias="orderDescription", description="Description of the order."),
    ] = None
    cloud_signature_data: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="cloudSignatureData"),
        pydantic.Field(alias="cloudSignatureData", description="Cloud signature data."),
    ] = None
    cloud_signature_format: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="cloudSignatureFormat"),
        pydantic.Field(alias="cloudSignatureFormat", description="Format of cloud signature."),
    ] = None
    payment_details: typing_extensions.Annotated[
        typing.Optional[typing.Any],
        FieldMetadata(alias="paymentDetails"),
        pydantic.Field(alias="paymentDetails", description="Additional payment details."),
    ] = None
    payor_data: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="payorData"),
        pydantic.Field(alias="payorData", description="Data about the payor."),
    ] = None
    account_id: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="accountId"),
        pydantic.Field(alias="accountId", description="Account ID."),
    ] = None
    bank_account: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="bankAccount"),
        pydantic.Field(alias="bankAccount", description="Bank account information."),
    ] = None
    gateway_connector: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="gatewayConnector"),
        pydantic.Field(alias="gatewayConnector", description="Gateway connector used."),
    ] = None
    bin_data: typing_extensions.Annotated[
        typing.Optional[typing.Any],
        FieldMetadata(alias="binData"),
        pydantic.Field(alias="binData", description="BIN data for the card."),
    ] = None

    if IS_PYDANTIC_V2:
        model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True)  # type: ignore # Pydantic v2
    else:

        class Config:
            frozen = True
            smart_union = True
            extra = pydantic.Extra.allow
