# 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(alias="vcardSent", description="Indicates if the virtual card was sent."),
    ] = None
    card_token: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="cardToken"),
        pydantic.Field(alias="cardToken", description="A unique token identifier for the card."),
    ] = None
    card_number: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="cardNumber"),
        pydantic.Field(alias="cardNumber", description="The masked number of the card."),
    ] = None
    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(alias="expirationDate", description="The expiration date of the card."),
    ] = None
    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(alias="currentBalance", description="The current balance available on the card."),
    ] = None
    expense_limit: typing_extensions.Annotated[
        typing.Optional[float],
        FieldMetadata(alias="expenseLimit"),
        pydantic.Field(alias="expenseLimit", description="The set limit for expenses."),
    ] = None
    expense_limit_period: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="expenseLimitPeriod"),
        pydantic.Field(alias="expenseLimitPeriod", description="The period for the expense limit."),
    ] = None
    max_number_of_uses: typing_extensions.Annotated[
        typing.Optional[int],
        FieldMetadata(alias="maxNumberOfUses"),
        pydantic.Field(alias="maxNumberOfUses", description="Maximum number of uses allowed for the card."),
    ] = None
    current_number_of_uses: typing_extensions.Annotated[
        typing.Optional[int],
        FieldMetadata(alias="currentNumberOfUses"),
        pydantic.Field(alias="currentNumberOfUses", description="The current number of times the card has been used."),
    ] = None
    exact_amount: typing_extensions.Annotated[
        typing.Optional[bool],
        FieldMetadata(alias="exactAmount"),
        pydantic.Field(
            alias="exactAmount", description="Indicates if only the exact amount is allowed for transactions."
        ),
    ] = None
    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(alias="misc1", description="A miscellaneous field for additional information."),
    ] = None
    misc_2: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="misc2"),
        pydantic.Field(alias="misc2", description="Another miscellaneous field for extra information."),
    ] = None
    date_created: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="dateCreated"),
        pydantic.Field(alias="dateCreated", description="The creation date of the record."),
    ] = None
    date_modified: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="dateModified"),
        pydantic.Field(alias="dateModified", description="The last modified date of the record."),
    ] = None
    associated_vendor: typing_extensions.Annotated[
        typing.Optional[VCardGetResponseAssociatedVendor],
        FieldMetadata(alias="associatedVendor"),
        pydantic.Field(alias="associatedVendor", description="Information about the associated vendor."),
    ] = None
    associated_customer: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="associatedCustomer"),
        pydantic.Field(
            alias="associatedCustomer", description="Information about the associated customer, if applicable."
        ),
    ] = None
    parent_org_name: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="ParentOrgName"),
        pydantic.Field(alias="ParentOrgName", description="Name of the parent organization."),
    ] = None
    paypoint_dbaname: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="PaypointDbaname"),
        pydantic.Field(alias="PaypointDbaname", description="The 'Doing Business As' name of the Paypoint."),
    ] = None
    paypoint_legalname: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="PaypointLegalname"),
        pydantic.Field(alias="PaypointLegalname", description="The legal name of the Paypoint."),
    ] = None
    paypoint_entryname: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="PaypointEntryname"),
        pydantic.Field(alias="PaypointEntryname", description="Entry name for the Paypoint, if applicable."),
    ] = None
    external_paypoint_id: typing_extensions.Annotated[
        typing.Optional[ExternalPaypointId],
        FieldMetadata(alias="externalPaypointID"),
        pydantic.Field(alias="externalPaypointID"),
    ] = None
    paypoint_id: typing_extensions.Annotated[
        typing.Optional[int],
        FieldMetadata(alias="paypointId"),
        pydantic.Field(alias="paypointId", description="The unique identifier for the paypoint."),
    ] = 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
