from __future__ import annotations
import json
from datetime import datetime
from dataclasses import dataclass, field
from tubeulator.utils.string_conv import to_camel_case
from pydantic import AliasGenerator, BaseModel, ConfigDict, PrivateAttr
from ..utils.paths import DtoEnum

class PredictionTiming(BaseModel):
    """
    Autogenerated from Vehicle::Tfl.Api.Presentation.Entities.PredictionTiming
    """

    model_config = ConfigDict(
        alias_generator=AliasGenerator(validation_alias=to_camel_case),
    )

    CountdownServerAdjustment: str = None
    Source: datetime = None
    Insert: datetime = None
    Read: datetime = None
    Sent: datetime = None
    Received: datetime = None
    _source_schema_name: str = PrivateAttr(default='Vehicle')
    _component_schema_name: str = PrivateAttr(default='Tfl')


PredictionTimingModel = PredictionTiming


class Prediction(BaseModel):
    """
    Autogenerated from Vehicle::Tfl.Api.Presentation.Entities.Prediction
    """

    model_config = ConfigDict(
        alias_generator=AliasGenerator(validation_alias=to_camel_case),
    )

    Id: str = None
    OperationType: int = None
    VehicleId: str = None
    NaptanId: str = None
    StationName: str = None
    LineId: str = None
    LineName: str = None
    PlatformName: str = None
    Direction: str = None
    Bearing: str = None
    DestinationNaptanId: str = None
    DestinationName: str = None
    Timestamp: datetime = None
    TimeToStation: int = None
    CurrentLocation: str = None
    Towards: str = None
    ExpectedArrival: datetime = None
    TimeToLive: datetime = None
    ModeName: str = None
    Timing: PredictionTimingModel = None
    _source_schema_name: str = PrivateAttr(default='Vehicle')
    _component_schema_name: str = PrivateAttr(default='Tfl-2')


PredictionModel = Prediction


class VehicleMatch(BaseModel):
    """
    Autogenerated from Vehicle::Tfl.Api.Presentation.Entities.VehicleMatch
    """

    model_config = ConfigDict(
        alias_generator=AliasGenerator(validation_alias=to_camel_case),
    )

    Vrm: str = None
    Type: str = None
    Make: str = None
    Model: str = None
    Colour: str = None
    Compliance: str = None
    _source_schema_name: str = PrivateAttr(default='Vehicle')
    _component_schema_name: str = PrivateAttr(default='Tfl-3')


VehicleMatchModel = VehicleMatch


class idsArrivalsGet200ApplicationJsonResponse(BaseModel):
    """
    Autogenerated from Vehicle::ids-ArrivalsGet200ApplicationJsonResponse
    """

    model_config = ConfigDict(
        alias_generator=AliasGenerator(validation_alias=to_camel_case),
    )

    _source_schema_name: str = PrivateAttr(default='Vehicle')
    _component_schema_name: str = PrivateAttr(default='ids-ArrivalsGet200ApplicationJsonResponse')


idsArrivalsGet200ApplicationJsonResponseModel = idsArrivalsGet200ApplicationJsonResponse


class Deserialisers(DtoEnum):
    Tfl = PredictionTiming
    Tfl_2 = Prediction
    Tfl_3 = VehicleMatch
    ids_ArrivalsGet200ApplicationJsonResponse = idsArrivalsGet200ApplicationJsonResponse