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 Bay(BaseModel):
    """
    Autogenerated from occupancy::Tfl.Api.Presentation.Entities.Bay
    """

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

    BayType: str = None
    BayCount: int = None
    Free: int = None
    Occupied: int = None
    _source_schema_name: str = PrivateAttr(default='occupancy')
    _component_schema_name: str = PrivateAttr(default='Tfl.Api.Presentation.Entities.Bay')


BayModel = Bay


class CarParkOccupancy(BaseModel):
    """
    Autogenerated from occupancy::Tfl.Api.Presentation.Entities.CarParkOccupancy
    """

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

    Id: str = None
    Bays: list["BayModel"] = []
    Name: str = None
    CarParkDetailsUrl: str = None
    _source_schema_name: str = PrivateAttr(default='occupancy')
    _component_schema_name: str = PrivateAttr(default='Tfl.Api.Presentation.Entities.CarParkOccupancy')


CarParkOccupancyModel = CarParkOccupancy


class ChargeConnectorOccupancy(BaseModel):
    """
    Autogenerated from occupancy::Tfl.Api.Presentation.Entities.ChargeConnectorOccupancy
    """

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

    Id: int = None
    SourceSystemPlaceId: str = None
    Status: str = None
    _source_schema_name: str = PrivateAttr(default='occupancy')
    _component_schema_name: str = PrivateAttr(default='Tfl.Api.Presentation.Entities.ChargeConnectorOccupancy')


ChargeConnectorOccupancyModel = ChargeConnectorOccupancy


class BikePointOccupancy(BaseModel):
    """
    Autogenerated from occupancy::Tfl.Api.Presentation.Entities.BikePointOccupancy
    """

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

    Id: str = None
    Name: str = None
    BikesCount: int = None
    EmptyDocks: int = None
    TotalDocks: int = None
    _source_schema_name: str = PrivateAttr(default='occupancy')
    _component_schema_name: str = PrivateAttr(default='Tfl.Api.Presentation.Entities.BikePointOccupancy')


BikePointOccupancyModel = BikePointOccupancy


class Deserialisers(DtoEnum):
    Tfl__Api__Presentation__Entities__Bay = Bay
    Tfl__Api__Presentation__Entities__CarParkOccupancy = CarParkOccupancy
    Tfl__Api__Presentation__Entities__ChargeConnectorOccupancy = ChargeConnectorOccupancy
    Tfl__Api__Presentation__Entities__BikePointOccupancy = BikePointOccupancy