# 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 .additional_data_map import AdditionalDataMap
from .billing_zip import BillingZip
from .customer_id import CustomerId
from .customer_number_nullable import CustomerNumberNullable
from .customer_status import CustomerStatus
from .email import Email
from .shippingaddress import Shippingaddress
from .shippingaddressadditional import Shippingaddressadditional
from .shippingcity import Shippingcity
from .shippingcountry import Shippingcountry
from .shippingstate import Shippingstate
from .shippingzip import Shippingzip


class QueryTransactionPayorDataCustomer(UniversalBaseModel):
    identifiers: typing_extensions.Annotated[
        typing.Optional[typing.List[typing.Any]],
        FieldMetadata(alias="Identifiers"),
        pydantic.Field(alias="Identifiers", description="Array of field names to be used as identifiers."),
    ] = None
    first_name: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="FirstName"),
        pydantic.Field(alias="FirstName", description="Customer/Payor first name."),
    ] = None
    last_name: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="LastName"),
        pydantic.Field(alias="LastName", description="Customer/Payor last name."),
    ] = None
    company_name: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="CompanyName"),
        pydantic.Field(alias="CompanyName", description="Customer's company name."),
    ] = None
    billing_address_1: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="BillingAddress1"),
        pydantic.Field(alias="BillingAddress1", description="Customer's billing address."),
    ] = None
    billing_address_2: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="BillingAddress2"),
        pydantic.Field(alias="BillingAddress2", description="Additional line for Customer's billing address."),
    ] = None
    billing_city: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="BillingCity"),
        pydantic.Field(alias="BillingCity", description="Customer's billing city."),
    ] = None
    billing_state: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="BillingState"),
        pydantic.Field(
            alias="BillingState", description="Customer's billing state. Must be 2-letter state code for address in US."
        ),
    ] = None
    billing_zip: typing_extensions.Annotated[
        typing.Optional[BillingZip],
        FieldMetadata(alias="BillingZip"),
        pydantic.Field(alias="BillingZip", description="Customer's billing ZIP code."),
    ] = None
    billing_country: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="BillingCountry"),
        pydantic.Field(alias="BillingCountry", description="Customer's billing country."),
    ] = None
    billing_phone: typing_extensions.Annotated[
        typing.Optional[str],
        FieldMetadata(alias="BillingPhone"),
        pydantic.Field(alias="BillingPhone", description="Customer's phone number."),
    ] = None
    billing_email: typing_extensions.Annotated[
        typing.Optional[Email],
        FieldMetadata(alias="BillingEmail"),
        pydantic.Field(alias="BillingEmail", description="Customer's email address."),
    ] = None
    customer_number: typing_extensions.Annotated[
        typing.Optional[CustomerNumberNullable],
        FieldMetadata(alias="CustomerNumber"),
        pydantic.Field(alias="CustomerNumber"),
    ] = None
    shipping_address_1: typing_extensions.Annotated[
        typing.Optional[Shippingaddress],
        FieldMetadata(alias="ShippingAddress1"),
        pydantic.Field(alias="ShippingAddress1"),
    ] = None
    shipping_address_2: typing_extensions.Annotated[
        typing.Optional[Shippingaddressadditional],
        FieldMetadata(alias="ShippingAddress2"),
        pydantic.Field(alias="ShippingAddress2"),
    ] = None
    shipping_city: typing_extensions.Annotated[
        typing.Optional[Shippingcity], FieldMetadata(alias="ShippingCity"), pydantic.Field(alias="ShippingCity")
    ] = None
    shipping_state: typing_extensions.Annotated[
        typing.Optional[Shippingstate], FieldMetadata(alias="ShippingState"), pydantic.Field(alias="ShippingState")
    ] = None
    shipping_zip: typing_extensions.Annotated[
        typing.Optional[Shippingzip], FieldMetadata(alias="ShippingZip"), pydantic.Field(alias="ShippingZip")
    ] = None
    shipping_country: typing_extensions.Annotated[
        typing.Optional[Shippingcountry],
        FieldMetadata(alias="ShippingCountry"),
        pydantic.Field(alias="ShippingCountry"),
    ] = None
    customer_id: typing_extensions.Annotated[
        typing.Optional[CustomerId], FieldMetadata(alias="customerId"), pydantic.Field(alias="customerId")
    ] = None
    customer_status: typing_extensions.Annotated[
        typing.Optional[CustomerStatus], FieldMetadata(alias="customerStatus"), pydantic.Field(alias="customerStatus")
    ] = None
    additional_data: typing_extensions.Annotated[
        typing.Optional[AdditionalDataMap],
        FieldMetadata(alias="AdditionalData"),
        pydantic.Field(alias="AdditionalData"),
    ] = 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
