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

import datetime as dt
import typing

from ...core.datetime_utils import serialize_datetime
from ...core.pydantic_utilities import pydantic_v1
from ...invoice_types.types.invoice_status import InvoiceStatus
from .line_item_availabilities import LineItemAvailabilities


class TokenGenerationInvoiceOptions(pydantic_v1.BaseModel):
    line_items: typing.Optional[LineItemAvailabilities] = pydantic_v1.Field(alias="lineItems", default=None)
    """
    Defaults to OPTIONAL. If set to REQUIRED, the user will be required to provide at least one line item when creating an invoice. If set to DISABLED, the user will not be able to provide line items when creating an invoice.
    """

    disable_line_items: typing.Optional[bool] = pydantic_v1.Field(alias="disableLineItems", default=None)
    """
    DEPRECATED. Use lineItems instead.
    """

    status: typing.List[InvoiceStatus]

    def json(self, **kwargs: typing.Any) -> str:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().json(**kwargs_with_defaults)

    def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
        kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs}
        return super().dict(**kwargs_with_defaults)

    class Config:
        frozen = True
        smart_union = True
        allow_population_by_field_name = True
        populate_by_name = True
        extra = pydantic_v1.Extra.allow
        json_encoders = {dt.datetime: serialize_datetime}
