# 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
from .cardcvv import Cardcvv
from .cardexp import Cardexp
from .cardholder import Cardholder
from .cardnumber import Cardnumber
from .cardzip import Cardzip
from .initiator import Initiator
from .save_if_success import SaveIfSuccess


class PayMethodCredit(UniversalBaseModel):
    cardcvv: typing.Optional[Cardcvv] = None
    cardexp: Cardexp
    card_holder: typing_extensions.Annotated[typing.Optional[Cardholder], FieldMetadata(alias="cardHolder")] = None
    cardnumber: Cardnumber
    cardzip: typing.Optional[Cardzip] = None
    initiator: typing.Optional[Initiator] = None
    method: typing.Literal["card"] = pydantic.Field(default="card")
    """
    Method to use for the transaction. For transactions with a credit or debit card, or a tokenized card, use `card`.
    """

    save_if_success: typing_extensions.Annotated[
        typing.Optional[SaveIfSuccess], FieldMetadata(alias="saveIfSuccess")
    ] = 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
