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

from __future__ import annotations
from ...core.pydantic_utilities import UniversalBaseModel
import typing
from ...payment_method_types.types.currency_code import CurrencyCode
from ...core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .entity_id import EntityId


class Trigger_Amount(UniversalBaseModel):
    """
    Examples
    --------
    from mercoa.entity_types import Trigger_Amount

    Trigger_Amount(
        amount=100.0,
        currency="USD",
    )
    """

    type: typing.Literal["amount"] = "amount"
    amount: float
    currency: CurrencyCode

    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


class Trigger_Vendor(UniversalBaseModel):
    """
    Examples
    --------
    from mercoa.entity_types import Trigger_Amount

    Trigger_Amount(
        amount=100.0,
        currency="USD",
    )
    """

    type: typing.Literal["vendor"] = "vendor"
    vendor_ids: typing.List[EntityId] = pydantic.Field(alias="vendorIds")

    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


class Trigger_Metadata(UniversalBaseModel):
    """
    Examples
    --------
    from mercoa.entity_types import Trigger_Amount

    Trigger_Amount(
        amount=100.0,
        currency="USD",
    )
    """

    type: typing.Literal["metadata"] = "metadata"
    key: str
    value: str

    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


"""
from mercoa.entity_types import Trigger_Amount

Trigger_Amount(
    amount=100.0,
    currency="USD",
)
"""
Trigger = typing.Union[Trigger_Amount, Trigger_Vendor, Trigger_Metadata]
