# 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 .product_config_add_on1tb import ProductConfigAddOn1Tb
from .product_config_add_on200gb import ProductConfigAddOn200Gb
from .product_config_add_on500gb import ProductConfigAddOn500Gb
from .product_config_chat_agent import ProductConfigChatAgent
from .product_config_chatintegration_professional import ProductConfigChatintegrationProfessional
from .product_config_chatintegration_starter import ProductConfigChatintegrationStarter
from .product_config_developer import ProductConfigDeveloper
from .product_config_projectroom import ProductConfigProjectroom


class ProductConfig(UniversalBaseModel):
    developer: typing.Optional[ProductConfigDeveloper] = None
    projectroom: typing.Optional[ProductConfigProjectroom] = None
    chatintegration_starter: typing_extensions.Annotated[
        typing.Optional[ProductConfigChatintegrationStarter],
        FieldMetadata(alias="chatintegration-starter"),
        pydantic.Field(alias="chatintegration-starter"),
    ] = None
    chatintegration_professional: typing_extensions.Annotated[
        typing.Optional[ProductConfigChatintegrationProfessional],
        FieldMetadata(alias="chatintegration-professional"),
        pydantic.Field(alias="chatintegration-professional"),
    ] = None
    add_on200gb: typing_extensions.Annotated[
        typing.Optional[ProductConfigAddOn200Gb],
        FieldMetadata(alias="add-on-200gb"),
        pydantic.Field(alias="add-on-200gb"),
    ] = None
    add_on500gb: typing_extensions.Annotated[
        typing.Optional[ProductConfigAddOn500Gb],
        FieldMetadata(alias="add-on-500gb"),
        pydantic.Field(alias="add-on-500gb"),
    ] = None
    add_on1tb: typing_extensions.Annotated[
        typing.Optional[ProductConfigAddOn1Tb], FieldMetadata(alias="add-on-1tb"), pydantic.Field(alias="add-on-1tb")
    ] = None
    chat_agent: typing_extensions.Annotated[
        typing.Optional[ProductConfigChatAgent], FieldMetadata(alias="chat-agent"), pydantic.Field(alias="chat-agent")
    ] = 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
