# 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 .ambient_temperature_response_body import AmbientTemperatureResponseBody
from .camera_connector_disconected_response_body import CameraConnectorDisconectedResponseBody
from .camera_stream_issue_response_body import CameraStreamIssueResponseBody
from .cell_signal_loss_response_body import CellSignalLossResponseBody
from .cloud_backup_upload_issue_response_body import CloudBackupUploadIssueResponseBody
from .dashcam_disconnected_response_body import DashcamDisconnectedResponseBody
from .data_input_value_response_body import DataInputValueResponseBody
from .device_movement_data_response_body import DeviceMovementDataResponseBody
from .device_movement_stopped_data_response_body import DeviceMovementStoppedDataResponseBody
from .door_open_response_body import DoorOpenResponseBody
from .driver_app_sign_in_response_body import DriverAppSignInResponseBody
from .driver_app_sign_out_response_body import DriverAppSignOutResponseBody
from .driver_document_submitted_response_body import DriverDocumentSubmittedResponseBody
from .driver_message_received_response_body import DriverMessageReceivedResponseBody
from .driver_message_sent_response_body import DriverMessageSentResponseBody
from .driver_recorded_response_body import DriverRecordedResponseBody
from .engine_idle_data_response_body import EngineIdleDataResponseBody
from .engine_off_response_body import EngineOffResponseBody
from .engine_on_response_body import EngineOnResponseBody
from .form_submitted_response_body import FormSubmittedResponseBody
from .form_updated_response_body import FormUpdatedResponseBody
from .fuel_level_percentage_response_body import FuelLevelPercentageResponseBody
from .gateway_disconnected_response_body import GatewayDisconnectedResponseBody
from .gateway_with_vehicle_tiny_response_response_body import GatewayWithVehicleTinyResponseResponseBody
from .gps_signal_loss_response_body import GpsSignalLossResponseBody
from .harsh_event_data_response_body import HarshEventDataResponseBody
from .hos_violation_data_response_body import HosViolationDataResponseBody
from .inactivity_response_body import InactivityResponseBody
from .inside_geofence_data_response_body import InsideGeofenceDataResponseBody
from .issue_created_response_body import IssueCreatedResponseBody
from .jamming_detected_response_body import JammingDetectedResponseBody
from .missing_dvir_past_due_response_body import MissingDvirPastDueResponseBody
from .motion_detected_response_body import MotionDetectedResponseBody
from .out_of_route_response_body import OutOfRouteResponseBody
from .outside_geofence_data_response_body import OutsideGeofenceDataResponseBody
from .panic_button_response_body import PanicButtonResponseBody
from .person_detected_response_body import PersonDetectedResponseBody
from .reading_trigger_details_response_body import ReadingTriggerDetailsResponseBody
from .reefer_temperature_response_body import ReeferTemperatureResponseBody
from .route_stop_details_object_response_body import RouteStopDetailsObjectResponseBody
from .route_stop_eta_response_body import RouteStopEtaResponseBody
from .scheduled_maintenance_by_engine_hours_response_body import ScheduledMaintenanceByEngineHoursResponseBody
from .scheduled_maintenance_data_response_body import ScheduledMaintenanceDataResponseBody
from .scheduled_maintenance_odometer_data_response_body import ScheduledMaintenanceOdometerDataResponseBody
from .severe_speeding_started_response_object_response_body import SevereSpeedingStartedResponseObjectResponseBody
from .site_gateway_disconnected_response_body import SiteGatewayDisconnectedResponseBody
from .speed_data_response_body import SpeedDataResponseBody
from .sudden_fuel_level_drop_response_body import SuddenFuelLevelDropResponseBody
from .sudden_fuel_level_rise_response_body import SuddenFuelLevelRiseResponseBody
from .tampering_detected_response_body import TamperingDetectedResponseBody
from .tire_faults_response_body import TireFaultsResponseBody
from .unassigned_driving_data_response_body import UnassignedDrivingDataResponseBody
from .vehicle_battery_voltage_response_body import VehicleBatteryVoltageResponseBody
from .vehicle_def_level_percentage_response_body import VehicleDefLevelPercentageResponseBody
from .vehicle_detected_response_body import VehicleDetectedResponseBody
from .vehicle_faults_response_body import VehicleFaultsResponseBody
from .worker_safety_sos_data_response_body import WorkerSafetySosDataResponseBody
from .workflow_dvir_submitted_response_object_response_body import WorkflowDvirSubmittedResponseObjectResponseBody
from .workflow_geofence_event_response_object_response_body import WorkflowGeofenceEventResponseObjectResponseBody


class WorkflowIncidentDetailsObjectResponseBody(UniversalBaseModel):
    """
    Object representing the granular details of the condition. These details will vary depending on the condition.
    """

    ambient_temperature: typing_extensions.Annotated[
        typing.Optional[AmbientTemperatureResponseBody],
        FieldMetadata(alias="ambientTemperature"),
        pydantic.Field(alias="ambientTemperature"),
    ] = None
    camera_connector_disconected: typing_extensions.Annotated[
        typing.Optional[CameraConnectorDisconectedResponseBody],
        FieldMetadata(alias="cameraConnectorDisconected"),
        pydantic.Field(alias="cameraConnectorDisconected"),
    ] = None
    camera_stream_issue: typing_extensions.Annotated[
        typing.Optional[CameraStreamIssueResponseBody],
        FieldMetadata(alias="cameraStreamIssue"),
        pydantic.Field(alias="cameraStreamIssue"),
    ] = None
    cell_signal_loss: typing_extensions.Annotated[
        typing.Optional[CellSignalLossResponseBody],
        FieldMetadata(alias="cellSignalLoss"),
        pydantic.Field(alias="cellSignalLoss"),
    ] = None
    cloud_backup_upload_issue: typing_extensions.Annotated[
        typing.Optional[CloudBackupUploadIssueResponseBody],
        FieldMetadata(alias="cloudBackupUploadIssue"),
        pydantic.Field(alias="cloudBackupUploadIssue"),
    ] = None
    dashcam_disconnected: typing_extensions.Annotated[
        typing.Optional[DashcamDisconnectedResponseBody],
        FieldMetadata(alias="dashcamDisconnected"),
        pydantic.Field(alias="dashcamDisconnected"),
    ] = None
    data_input_value: typing_extensions.Annotated[
        typing.Optional[DataInputValueResponseBody],
        FieldMetadata(alias="dataInputValue"),
        pydantic.Field(alias="dataInputValue"),
    ] = None
    device_movement: typing_extensions.Annotated[
        typing.Optional[DeviceMovementDataResponseBody],
        FieldMetadata(alias="deviceMovement"),
        pydantic.Field(alias="deviceMovement"),
    ] = None
    device_movement_stopped: typing_extensions.Annotated[
        typing.Optional[DeviceMovementStoppedDataResponseBody],
        FieldMetadata(alias="deviceMovementStopped"),
        pydantic.Field(alias="deviceMovementStopped"),
    ] = None
    door_open: typing_extensions.Annotated[
        typing.Optional[DoorOpenResponseBody], FieldMetadata(alias="doorOpen"), pydantic.Field(alias="doorOpen")
    ] = None
    driver_app_sign_in: typing_extensions.Annotated[
        typing.Optional[DriverAppSignInResponseBody],
        FieldMetadata(alias="driverAppSignIn"),
        pydantic.Field(alias="driverAppSignIn"),
    ] = None
    driver_app_sign_out: typing_extensions.Annotated[
        typing.Optional[DriverAppSignOutResponseBody],
        FieldMetadata(alias="driverAppSignOut"),
        pydantic.Field(alias="driverAppSignOut"),
    ] = None
    driver_document_submitted: typing_extensions.Annotated[
        typing.Optional[DriverDocumentSubmittedResponseBody],
        FieldMetadata(alias="driverDocumentSubmitted"),
        pydantic.Field(alias="driverDocumentSubmitted"),
    ] = None
    driver_message_received: typing_extensions.Annotated[
        typing.Optional[DriverMessageReceivedResponseBody],
        FieldMetadata(alias="driverMessageReceived"),
        pydantic.Field(alias="driverMessageReceived"),
    ] = None
    driver_message_sent: typing_extensions.Annotated[
        typing.Optional[DriverMessageSentResponseBody],
        FieldMetadata(alias="driverMessageSent"),
        pydantic.Field(alias="driverMessageSent"),
    ] = None
    driver_recorded: typing_extensions.Annotated[
        typing.Optional[DriverRecordedResponseBody],
        FieldMetadata(alias="driverRecorded"),
        pydantic.Field(alias="driverRecorded"),
    ] = None
    dvir_submitted_device: typing_extensions.Annotated[
        typing.Optional[WorkflowDvirSubmittedResponseObjectResponseBody],
        FieldMetadata(alias="dvirSubmittedDevice"),
        pydantic.Field(alias="dvirSubmittedDevice"),
    ] = None
    engine_idle: typing_extensions.Annotated[
        typing.Optional[EngineIdleDataResponseBody],
        FieldMetadata(alias="engineIdle"),
        pydantic.Field(alias="engineIdle"),
    ] = None
    engine_off: typing_extensions.Annotated[
        typing.Optional[EngineOffResponseBody], FieldMetadata(alias="engineOff"), pydantic.Field(alias="engineOff")
    ] = None
    engine_on: typing_extensions.Annotated[
        typing.Optional[EngineOnResponseBody], FieldMetadata(alias="engineOn"), pydantic.Field(alias="engineOn")
    ] = None
    form_submitted: typing_extensions.Annotated[
        typing.Optional[FormSubmittedResponseBody],
        FieldMetadata(alias="formSubmitted"),
        pydantic.Field(alias="formSubmitted"),
    ] = None
    form_updated: typing_extensions.Annotated[
        typing.Optional[FormUpdatedResponseBody],
        FieldMetadata(alias="formUpdated"),
        pydantic.Field(alias="formUpdated"),
    ] = None
    fuel_level_percentage: typing_extensions.Annotated[
        typing.Optional[FuelLevelPercentageResponseBody],
        FieldMetadata(alias="fuelLevelPercentage"),
        pydantic.Field(alias="fuelLevelPercentage"),
    ] = None
    gateway_disconnected: typing_extensions.Annotated[
        typing.Optional[GatewayDisconnectedResponseBody],
        FieldMetadata(alias="gatewayDisconnected"),
        pydantic.Field(alias="gatewayDisconnected"),
    ] = None
    gateway_unplugged: typing_extensions.Annotated[
        typing.Optional[GatewayWithVehicleTinyResponseResponseBody],
        FieldMetadata(alias="gatewayUnplugged"),
        pydantic.Field(alias="gatewayUnplugged"),
    ] = None
    geofence_entry: typing_extensions.Annotated[
        typing.Optional[WorkflowGeofenceEventResponseObjectResponseBody],
        FieldMetadata(alias="geofenceEntry"),
        pydantic.Field(alias="geofenceEntry"),
    ] = None
    geofence_exit: typing_extensions.Annotated[
        typing.Optional[WorkflowGeofenceEventResponseObjectResponseBody],
        FieldMetadata(alias="geofenceExit"),
        pydantic.Field(alias="geofenceExit"),
    ] = None
    gps_signal_loss: typing_extensions.Annotated[
        typing.Optional[GpsSignalLossResponseBody],
        FieldMetadata(alias="gpsSignalLoss"),
        pydantic.Field(alias="gpsSignalLoss"),
    ] = None
    harsh_event: typing_extensions.Annotated[
        typing.Optional[HarshEventDataResponseBody],
        FieldMetadata(alias="harshEvent"),
        pydantic.Field(alias="harshEvent"),
    ] = None
    hos_violation: typing_extensions.Annotated[
        typing.Optional[HosViolationDataResponseBody],
        FieldMetadata(alias="hosViolation"),
        pydantic.Field(alias="hosViolation"),
    ] = None
    inactivity: typing.Optional[InactivityResponseBody] = None
    inside_geofence: typing_extensions.Annotated[
        typing.Optional[InsideGeofenceDataResponseBody],
        FieldMetadata(alias="insideGeofence"),
        pydantic.Field(alias="insideGeofence"),
    ] = None
    issue_created: typing_extensions.Annotated[
        typing.Optional[IssueCreatedResponseBody],
        FieldMetadata(alias="issueCreated"),
        pydantic.Field(alias="issueCreated"),
    ] = None
    jamming_detected: typing_extensions.Annotated[
        typing.Optional[JammingDetectedResponseBody],
        FieldMetadata(alias="jammingDetected"),
        pydantic.Field(alias="jammingDetected"),
    ] = None
    missing_dvir_past_due: typing_extensions.Annotated[
        typing.Optional[MissingDvirPastDueResponseBody],
        FieldMetadata(alias="missingDvirPastDue"),
        pydantic.Field(alias="missingDvirPastDue"),
    ] = None
    motion_detected: typing_extensions.Annotated[
        typing.Optional[MotionDetectedResponseBody],
        FieldMetadata(alias="motionDetected"),
        pydantic.Field(alias="motionDetected"),
    ] = None
    out_of_route: typing_extensions.Annotated[
        typing.Optional[OutOfRouteResponseBody], FieldMetadata(alias="outOfRoute"), pydantic.Field(alias="outOfRoute")
    ] = None
    outside_geofence: typing_extensions.Annotated[
        typing.Optional[OutsideGeofenceDataResponseBody],
        FieldMetadata(alias="outsideGeofence"),
        pydantic.Field(alias="outsideGeofence"),
    ] = None
    panic_button: typing_extensions.Annotated[
        typing.Optional[PanicButtonResponseBody],
        FieldMetadata(alias="panicButton"),
        pydantic.Field(alias="panicButton"),
    ] = None
    person_detected: typing_extensions.Annotated[
        typing.Optional[PersonDetectedResponseBody],
        FieldMetadata(alias="personDetected"),
        pydantic.Field(alias="personDetected"),
    ] = None
    reading: typing.Optional[ReadingTriggerDetailsResponseBody] = None
    reefer_temperature: typing_extensions.Annotated[
        typing.Optional[ReeferTemperatureResponseBody],
        FieldMetadata(alias="reeferTemperature"),
        pydantic.Field(alias="reeferTemperature"),
    ] = None
    route_stop_arrival: typing_extensions.Annotated[
        typing.Optional[RouteStopDetailsObjectResponseBody],
        FieldMetadata(alias="routeStopArrival"),
        pydantic.Field(alias="routeStopArrival"),
    ] = None
    route_stop_departure: typing_extensions.Annotated[
        typing.Optional[RouteStopDetailsObjectResponseBody],
        FieldMetadata(alias="routeStopDeparture"),
        pydantic.Field(alias="routeStopDeparture"),
    ] = None
    route_stop_eta: typing_extensions.Annotated[
        typing.Optional[RouteStopEtaResponseBody],
        FieldMetadata(alias="routeStopETA"),
        pydantic.Field(alias="routeStopETA"),
    ] = None
    scheduled_maintenance: typing_extensions.Annotated[
        typing.Optional[ScheduledMaintenanceDataResponseBody],
        FieldMetadata(alias="scheduledMaintenance"),
        pydantic.Field(alias="scheduledMaintenance"),
    ] = None
    scheduled_maintenance_by_engine_hours: typing_extensions.Annotated[
        typing.Optional[ScheduledMaintenanceByEngineHoursResponseBody],
        FieldMetadata(alias="scheduledMaintenanceByEngineHours"),
        pydantic.Field(alias="scheduledMaintenanceByEngineHours"),
    ] = None
    scheduled_maintenance_odometer: typing_extensions.Annotated[
        typing.Optional[ScheduledMaintenanceOdometerDataResponseBody],
        FieldMetadata(alias="scheduledMaintenanceOdometer"),
        pydantic.Field(alias="scheduledMaintenanceOdometer"),
    ] = None
    severe_speeding: typing_extensions.Annotated[
        typing.Optional[SevereSpeedingStartedResponseObjectResponseBody],
        FieldMetadata(alias="severeSpeeding"),
        pydantic.Field(alias="severeSpeeding"),
    ] = None
    site_gateway_disconnected: typing_extensions.Annotated[
        typing.Optional[SiteGatewayDisconnectedResponseBody],
        FieldMetadata(alias="siteGatewayDisconnected"),
        pydantic.Field(alias="siteGatewayDisconnected"),
    ] = None
    speed: typing.Optional[SpeedDataResponseBody] = None
    sudden_fuel_level_drop: typing_extensions.Annotated[
        typing.Optional[SuddenFuelLevelDropResponseBody],
        FieldMetadata(alias="suddenFuelLevelDrop"),
        pydantic.Field(alias="suddenFuelLevelDrop"),
    ] = None
    sudden_fuel_level_rise: typing_extensions.Annotated[
        typing.Optional[SuddenFuelLevelRiseResponseBody],
        FieldMetadata(alias="suddenFuelLevelRise"),
        pydantic.Field(alias="suddenFuelLevelRise"),
    ] = None
    tampering_detected: typing_extensions.Annotated[
        typing.Optional[TamperingDetectedResponseBody],
        FieldMetadata(alias="tamperingDetected"),
        pydantic.Field(alias="tamperingDetected"),
    ] = None
    tire_faults: typing_extensions.Annotated[
        typing.Optional[TireFaultsResponseBody], FieldMetadata(alias="tireFaults"), pydantic.Field(alias="tireFaults")
    ] = None
    unassigned_driving: typing_extensions.Annotated[
        typing.Optional[UnassignedDrivingDataResponseBody],
        FieldMetadata(alias="unassignedDriving"),
        pydantic.Field(alias="unassignedDriving"),
    ] = None
    vehicle_battery_voltage: typing_extensions.Annotated[
        typing.Optional[VehicleBatteryVoltageResponseBody],
        FieldMetadata(alias="vehicleBatteryVoltage"),
        pydantic.Field(alias="vehicleBatteryVoltage"),
    ] = None
    vehicle_def_level_percentage: typing_extensions.Annotated[
        typing.Optional[VehicleDefLevelPercentageResponseBody],
        FieldMetadata(alias="vehicleDefLevelPercentage"),
        pydantic.Field(alias="vehicleDefLevelPercentage"),
    ] = None
    vehicle_detected: typing_extensions.Annotated[
        typing.Optional[VehicleDetectedResponseBody],
        FieldMetadata(alias="vehicleDetected"),
        pydantic.Field(alias="vehicleDetected"),
    ] = None
    vehicle_faults: typing_extensions.Annotated[
        typing.Optional[VehicleFaultsResponseBody],
        FieldMetadata(alias="vehicleFaults"),
        pydantic.Field(alias="vehicleFaults"),
    ] = None
    worker_safety_sos: typing_extensions.Annotated[
        typing.Optional[WorkerSafetySosDataResponseBody],
        FieldMetadata(alias="workerSafetySos"),
        pydantic.Field(alias="workerSafetySos"),
    ] = 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
