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

from ..core.unchecked_base_model import UncheckedBaseModel
import typing
import pydantic
from .money import Money
from ..core.pydantic_utilities import IS_PYDANTIC_V2


class OrderReturnLineItemModifier(UncheckedBaseModel):
    """
    A line item modifier being returned.
    """

    uid: typing.Optional[str] = pydantic.Field(default=None)
    """
    A unique ID that identifies the return modifier only within this order.
    """

    source_modifier_uid: typing.Optional[str] = pydantic.Field(default=None)
    """
    The modifier `uid` from the order's line item that contains the
    original sale of this line item modifier.
    """

    catalog_object_id: typing.Optional[str] = pydantic.Field(default=None)
    """
    The catalog object ID referencing [CatalogModifier](entity:CatalogModifier).
    """

    catalog_version: typing.Optional[int] = pydantic.Field(default=None)
    """
    The version of the catalog object that this line item modifier references.
    """

    name: typing.Optional[str] = pydantic.Field(default=None)
    """
    The name of the item modifier.
    """

    base_price_money: typing.Optional[Money] = pydantic.Field(default=None)
    """
    The base price for the modifier.
    
    `base_price_money` is required for ad hoc modifiers.
    If both `catalog_object_id` and `base_price_money` are set, `base_price_money` overrides the predefined [CatalogModifier](entity:CatalogModifier) price.
    """

    total_price_money: typing.Optional[Money] = pydantic.Field(default=None)
    """
    The total price of the item modifier for its line item.
    This is the modifier's `base_price_money` multiplied by the line item's quantity.
    """

    quantity: typing.Optional[str] = pydantic.Field(default=None)
    """
    The quantity of the line item modifier. The modifier quantity can be 0 or more.
    For example, suppose a restaurant offers a cheeseburger on the menu. When a buyer orders
    this item, the restaurant records the purchase by creating an `Order` object with a line item
    for a burger. The line item includes a line item modifier: the name is cheese and the quantity
    is 1. The buyer has the option to order extra cheese (or no cheese). If the buyer chooses
    the extra cheese option, the modifier quantity increases to 2. If the buyer does not want
    any cheese, the modifier quantity is set to 0.
    """

    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
