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 PlaceArray(BaseModel):
    """
    Autogenerated from BikePoint::Tfl-Api-Presentation-Entities-PlaceArray
    """

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

    _source_schema_name: str = PrivateAttr(default='BikePoint')
    _component_schema_name: str = PrivateAttr(default='Tfl-Api-Presentation-Entities-PlaceArray')


PlaceArrayModel = PlaceArray


class Place(BaseModel):
    """
    Autogenerated from BikePoint::Tfl.Api.Presentation.Entities.Place
    """

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

    Id: str = None
    Url: str = None
    CommonName: str = None
    Distance: float = None
    PlaceType: str = None
    AdditionalProperties: list["AdditionalPropertiesModel"]
    Children: list["PlaceModel"]
    ChildrenUrls: list[str]
    Lat: float = None
    Lon: float = None
    _source_schema_name: str = PrivateAttr(default='BikePoint')
    _component_schema_name: str = PrivateAttr(default='Tfl.Api.Presentation.Entities.Place')


PlaceModel = Place


class AdditionalProperties(BaseModel):
    """
    Autogenerated from BikePoint::Tfl.Api.Presentation.Entities.AdditionalProperties
    """

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

    Category: str = None
    Key: str = None
    SourceSystemKey: str = None
    Value: str = None
    Modified: datetime = None
    _source_schema_name: str = PrivateAttr(default='BikePoint')
    _component_schema_name: str = PrivateAttr(default='Tfl.Api.Presentation.Entities.AdditionalProperties')


AdditionalPropertiesModel = AdditionalProperties


class Deserialisers(DtoEnum):
    Tfl_Api_Presentation_Entities_PlaceArray = PlaceArray
    Tfl__Api__Presentation__Entities__Place = Place
    Tfl__Api__Presentation__Entities__AdditionalProperties = AdditionalProperties