# 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 .trailer_stat_gps_odometer_meters_with_decorations_type_response_body import (
    TrailerStatGpsOdometerMetersWithDecorationsTypeResponseBody,
)
from .trailer_stat_gps_with_decorations_type_response_body import TrailerStatGpsWithDecorationsTypeResponseBody
from .trailer_stat_reefer_alarm_with_decorations_type_response_body import (
    TrailerStatReeferAlarmWithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_ambient_air_temperature_with_decorations_type_response_body import (
    TrailerStatReeferAmbientAirTemperatureWithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_door_state_zone_1_with_decorations_type_response_body import (
    TrailerStatReeferDoorStateZone1WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_door_state_zone_2_with_decorations_type_response_body import (
    TrailerStatReeferDoorStateZone2WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_door_state_zone_3_with_decorations_type_response_body import (
    TrailerStatReeferDoorStateZone3WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_fuel_percent_with_decorations_type_response_body import (
    TrailerStatReeferFuelPercentWithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_obd_engine_seconds_with_decorations_type_response_body import (
    TrailerStatReeferObdEngineSecondsWithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_return_air_temperature_milli_c_zone_1_with_decorations_type_response_body import (
    TrailerStatReeferReturnAirTemperatureMilliCZone1WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_return_air_temperature_milli_c_zone_2_with_decorations_type_response_body import (
    TrailerStatReeferReturnAirTemperatureMilliCZone2WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_return_air_temperature_milli_c_zone_3_with_decorations_type_response_body import (
    TrailerStatReeferReturnAirTemperatureMilliCZone3WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_run_mode_with_decorations_type_response_body import (
    TrailerStatReeferRunModeWithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_set_point_temperature_milli_c_zone_1_with_decorations_type_response_body import (
    TrailerStatReeferSetPointTemperatureMilliCZone1WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_set_point_temperature_milli_c_zone_2_with_decorations_type_response_body import (
    TrailerStatReeferSetPointTemperatureMilliCZone2WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_set_point_temperature_milli_c_zone_3_with_decorations_type_response_body import (
    TrailerStatReeferSetPointTemperatureMilliCZone3WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_state_with_decorations_type_response_body import (
    TrailerStatReeferStateWithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_state_zone_1_with_decorations_type_response_body import (
    TrailerStatReeferStateZone1WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_state_zone_2_with_decorations_type_response_body import (
    TrailerStatReeferStateZone2WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_state_zone_3_with_decorations_type_response_body import (
    TrailerStatReeferStateZone3WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_supply_air_temperature_milli_c_zone_1_with_decorations_type_response_body import (
    TrailerStatReeferSupplyAirTemperatureMilliCZone1WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_supply_air_temperature_milli_c_zone_2_with_decorations_type_response_body import (
    TrailerStatReeferSupplyAirTemperatureMilliCZone2WithDecorationsTypeResponseBody,
)
from .trailer_stat_reefer_supply_air_temperature_milli_c_zone_3_with_decorations_type_response_body import (
    TrailerStatReeferSupplyAirTemperatureMilliCZone3WithDecorationsTypeResponseBody,
)


class TrailerStatsObjectResponseBody(UniversalBaseModel):
    """
    A trailer and its stats
    """

    carrier_reefer_state: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferStateWithDecorationsTypeResponseBody]],
        FieldMetadata(alias="carrierReeferState"),
        pydantic.Field(alias="carrierReeferState", description="A list of engine state points."),
    ] = None
    gps: typing.Optional[typing.List[TrailerStatGpsWithDecorationsTypeResponseBody]] = pydantic.Field(default=None)
    """
    A list of GPS points.
    """

    gps_odometer_meters: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatGpsOdometerMetersWithDecorationsTypeResponseBody]],
        FieldMetadata(alias="gpsOdometerMeters"),
        pydantic.Field(alias="gpsOdometerMeters", description="A list of odometer points."),
    ] = None
    id: str = pydantic.Field()
    """
    ID of the trailer.
    """

    name: str = pydantic.Field()
    """
    Name of the vehicle.
    """

    reefer_alarms: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferAlarmWithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferAlarms"),
        pydantic.Field(alias="reeferAlarms", description="A list of reefer alarm points."),
    ] = None
    reefer_ambient_air_temperature_milli_c: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferAmbientAirTemperatureWithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferAmbientAirTemperatureMilliC"),
        pydantic.Field(
            alias="reeferAmbientAirTemperatureMilliC", description="A list of ambient air temperature points."
        ),
    ] = None
    reefer_door_state_zone_1: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferDoorStateZone1WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferDoorStateZone1"),
        pydantic.Field(alias="reeferDoorStateZone1", description="A list of door state points."),
    ] = None
    reefer_door_state_zone_2: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferDoorStateZone2WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferDoorStateZone2"),
        pydantic.Field(alias="reeferDoorStateZone2", description="A list of door state points."),
    ] = None
    reefer_door_state_zone_3: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferDoorStateZone3WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferDoorStateZone3"),
        pydantic.Field(alias="reeferDoorStateZone3", description="A list of door state points."),
    ] = None
    reefer_fuel_percent: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferFuelPercentWithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferFuelPercent"),
        pydantic.Field(alias="reeferFuelPercent", description="A list of fuel percent points."),
    ] = None
    reefer_obd_engine_seconds: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferObdEngineSecondsWithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferObdEngineSeconds"),
        pydantic.Field(alias="reeferObdEngineSeconds", description="A list of engine second points"),
    ] = None
    reefer_return_air_temperature_milli_c_zone_1: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferReturnAirTemperatureMilliCZone1WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferReturnAirTemperatureMilliCZone1"),
        pydantic.Field(
            alias="reeferReturnAirTemperatureMilliCZone1", description="A list of return air temperature points."
        ),
    ] = None
    reefer_return_air_temperature_milli_c_zone_2: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferReturnAirTemperatureMilliCZone2WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferReturnAirTemperatureMilliCZone2"),
        pydantic.Field(
            alias="reeferReturnAirTemperatureMilliCZone2", description="A list of return air temperature points."
        ),
    ] = None
    reefer_return_air_temperature_milli_c_zone_3: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferReturnAirTemperatureMilliCZone3WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferReturnAirTemperatureMilliCZone3"),
        pydantic.Field(
            alias="reeferReturnAirTemperatureMilliCZone3", description="A list of return air temperature points."
        ),
    ] = None
    reefer_run_mode: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferRunModeWithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferRunMode"),
        pydantic.Field(alias="reeferRunMode", description="A list of run mode points"),
    ] = None
    reefer_set_point_temperature_milli_c_zone_1: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferSetPointTemperatureMilliCZone1WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferSetPointTemperatureMilliCZone1"),
        pydantic.Field(
            alias="reeferSetPointTemperatureMilliCZone1", description="A list of set point temperature points."
        ),
    ] = None
    reefer_set_point_temperature_milli_c_zone_2: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferSetPointTemperatureMilliCZone2WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferSetPointTemperatureMilliCZone2"),
        pydantic.Field(
            alias="reeferSetPointTemperatureMilliCZone2", description="A list of set point temperature points."
        ),
    ] = None
    reefer_set_point_temperature_milli_c_zone_3: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferSetPointTemperatureMilliCZone3WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferSetPointTemperatureMilliCZone3"),
        pydantic.Field(
            alias="reeferSetPointTemperatureMilliCZone3", description="A list of set point temperature points."
        ),
    ] = None
    reefer_state_zone_1: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferStateZone1WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferStateZone1"),
        pydantic.Field(alias="reeferStateZone1", description="A list of engine state points."),
    ] = None
    reefer_state_zone_2: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferStateZone2WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferStateZone2"),
        pydantic.Field(alias="reeferStateZone2", description="A list of engine state points."),
    ] = None
    reefer_state_zone_3: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferStateZone3WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferStateZone3"),
        pydantic.Field(alias="reeferStateZone3", description="A list of engine state points."),
    ] = None
    reefer_supply_air_temperature_milli_c_zone_1: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferSupplyAirTemperatureMilliCZone1WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferSupplyAirTemperatureMilliCZone1"),
        pydantic.Field(
            alias="reeferSupplyAirTemperatureMilliCZone1", description="A list of supply air temperature points."
        ),
    ] = None
    reefer_supply_air_temperature_milli_c_zone_2: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferSupplyAirTemperatureMilliCZone2WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferSupplyAirTemperatureMilliCZone2"),
        pydantic.Field(
            alias="reeferSupplyAirTemperatureMilliCZone2", description="A list of supply air temperature points."
        ),
    ] = None
    reefer_supply_air_temperature_milli_c_zone_3: typing_extensions.Annotated[
        typing.Optional[typing.List[TrailerStatReeferSupplyAirTemperatureMilliCZone3WithDecorationsTypeResponseBody]],
        FieldMetadata(alias="reeferSupplyAirTemperatureMilliCZone3"),
        pydantic.Field(
            alias="reeferSupplyAirTemperatureMilliCZone3", description="A list of supply air temperature points."
        ),
    ] = 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
