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

import datetime as dt
import typing

import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2
from ..core.unchecked_base_model import UncheckedBaseModel
from .order_id import OrderId
from .order_item_info import OrderItemInfo
from .order_state import OrderState


class OrderResponse(UncheckedBaseModel):
    order_id: OrderId = pydantic.Field()
    """
    The ID of the order.
    """

    name: str = pydantic.Field()
    """
    The display name of the order.
    """

    state: OrderState = pydantic.Field()
    """
    The current state of the order.
    """

    items: typing.List[OrderItemInfo] = pydantic.Field()
    """
    The list of items in this order with their quotes.
    """

    total_amount_usd: typing.Optional[float] = pydantic.Field(default=None)
    """
    The total price for all items in USD. Excluded from response until quotes are available.
    """

    sandbox: typing.Optional[bool] = pydantic.Field(default=None)
    """
    Whether this is a sandbox order that auto-progresses without producer intervention.
    """

    created_at: dt.datetime = pydantic.Field()
    """
    The timestamp when the order was created.
    """

    submitted_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
    """
    The timestamp when the order was submitted, if applicable.
    """

    paid_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
    """
    The timestamp when payment was received, if applicable.
    """

    accepted_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
    """
    The timestamp when the order was accepted for production, if applicable.
    """

    completed_at: typing.Optional[dt.datetime] = pydantic.Field(default=None)
    """
    The timestamp when the order was completed, if applicable.
    """

    cancel_reason: typing.Optional[str] = pydantic.Field(default=None)
    """
    The reason the order was cancelled, if applicable.
    """

    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
