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

import typing

import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .hub_spot_company import HubSpotCompany
from .hub_spot_contact import HubSpotContact
from .hub_spot_deal import HubSpotDeal
from .hub_spot_task import HubSpotTask
from .hub_spot_ticket import HubSpotTicket


class HubSpotDataInput(UniversalBaseModel):
    """
    Complete HubSpot sandbox data structure (Flat Schema).

    All object types are top-level lists. Relationships are defined via association fields
    in the respective objects (e.g. associated_company_names in HubSpotContact).
    """

    companies: typing.Optional[typing.List[HubSpotCompany]] = pydantic.Field(default=None)
    """
    List of companies
    """

    contacts: typing.Optional[typing.List[HubSpotContact]] = pydantic.Field(default=None)
    """
    List of contacts
    """

    deals: typing.Optional[typing.List[HubSpotDeal]] = pydantic.Field(default=None)
    """
    List of deals
    """

    tickets: typing.Optional[typing.List[HubSpotTicket]] = pydantic.Field(default=None)
    """
    List of tickets
    """

    tasks: typing.Optional[typing.List[HubSpotTask]] = pydantic.Field(default=None)
    """
    List of tasks
    """

    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
