# 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 ...types.external_paypoint_id import ExternalPaypointId
from .v_card_get_response_associated_vendor import VCardGetResponseAssociatedVendor


class VCardGetResponse(UniversalBaseModel):
    vcard_sent: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="vcardSent")] = pydantic.Field(
        default=None
    )
    """
    Indicates if the virtual card was sent.
    """

    card_token: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="cardToken")] = pydantic.Field(
        default=None
    )
    """
    A unique token identifier for the card.
    """

    card_number: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="cardNumber")] = pydantic.Field(
        default=None
    )
    """
    The masked number of the card.
    """

    cvc: typing.Optional[str] = pydantic.Field(default=None)
    """
    Masked Card Verification Code.
    """

    expiration_date: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="expirationDate")] = (
        pydantic.Field(default=None)
    )
    """
    The expiration date of the card.
    """

    status: typing.Optional[str] = pydantic.Field(default=None)
    """
    The current status of the card.
    """

    amount: typing.Optional[float] = pydantic.Field(default=None)
    """
    The initial amount loaded on the card.
    """

    current_balance: typing_extensions.Annotated[typing.Optional[float], FieldMetadata(alias="currentBalance")] = (
        pydantic.Field(default=None)
    )
    """
    The current balance available on the card.
    """

    expense_limit: typing_extensions.Annotated[typing.Optional[float], FieldMetadata(alias="expenseLimit")] = (
        pydantic.Field(default=None)
    )
    """
    The set limit for expenses.
    """

    expense_limit_period: typing_extensions.Annotated[
        typing.Optional[str], FieldMetadata(alias="expenseLimitPeriod")
    ] = pydantic.Field(default=None)
    """
    The period for the expense limit.
    """

    max_number_of_uses: typing_extensions.Annotated[typing.Optional[int], FieldMetadata(alias="maxNumberOfUses")] = (
        pydantic.Field(default=None)
    )
    """
    Maximum number of uses allowed for the card.
    """

    current_number_of_uses: typing_extensions.Annotated[
        typing.Optional[int], FieldMetadata(alias="currentNumberOfUses")
    ] = pydantic.Field(default=None)
    """
    The current number of times the card has been used.
    """

    exact_amount: typing_extensions.Annotated[typing.Optional[bool], FieldMetadata(alias="exactAmount")] = (
        pydantic.Field(default=None)
    )
    """
    Indicates if only the exact amount is allowed for transactions.
    """

    mcc: typing.Optional[str] = pydantic.Field(default=None)
    """
    Merchant Category Code, if applicable.
    """

    tcc: typing.Optional[str] = pydantic.Field(default=None)
    """
    Transaction Category Code, if applicable.
    """

    misc_1: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="misc1")] = pydantic.Field(
        default=None
    )
    """
    A miscellaneous field for additional information.
    """

    misc_2: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="misc2")] = pydantic.Field(
        default=None
    )
    """
    Another miscellaneous field for extra information.
    """

    date_created: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="dateCreated")] = (
        pydantic.Field(default=None)
    )
    """
    The creation date of the record.
    """

    date_modified: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="dateModified")] = (
        pydantic.Field(default=None)
    )
    """
    The last modified date of the record.
    """

    associated_vendor: typing_extensions.Annotated[
        typing.Optional[VCardGetResponseAssociatedVendor], FieldMetadata(alias="associatedVendor")
    ] = pydantic.Field(default=None)
    """
    Information about the associated vendor.
    """

    associated_customer: typing_extensions.Annotated[
        typing.Optional[str], FieldMetadata(alias="associatedCustomer")
    ] = pydantic.Field(default=None)
    """
    Information about the associated customer, if applicable.
    """

    parent_org_name: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="ParentOrgName")] = (
        pydantic.Field(default=None)
    )
    """
    Name of the parent organization.
    """

    paypoint_dbaname: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="PaypointDbaname")] = (
        pydantic.Field(default=None)
    )
    """
    The 'Doing Business As' name of the Paypoint.
    """

    paypoint_legalname: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="PaypointLegalname")] = (
        pydantic.Field(default=None)
    )
    """
    The legal name of the Paypoint.
    """

    paypoint_entryname: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="PaypointEntryname")] = (
        pydantic.Field(default=None)
    )
    """
    Entry name for the Paypoint, if applicable.
    """

    external_paypoint_id: typing_extensions.Annotated[
        typing.Optional[ExternalPaypointId], FieldMetadata(alias="externalPaypointID")
    ] = 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
