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')


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-2')


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-3')


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-4')


BikePointOccupancyModel = BikePointOccupancy


class CarParkGet200ApplicationJsonResponse(BaseModel):
    """
    Autogenerated from occupancy::CarParkGet200ApplicationJsonResponse
    """

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

    _source_schema_name: str = PrivateAttr(default='occupancy')
    _component_schema_name: str = PrivateAttr(default='CarParkGet200ApplicationJsonResponse')


CarParkGet200ApplicationJsonResponseModel = CarParkGet200ApplicationJsonResponse


class ChargeConnectoridsGet200ApplicationJsonResponse(BaseModel):
    """
    Autogenerated from occupancy::ChargeConnector-ids-Get200ApplicationJsonResponse
    """

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

    _source_schema_name: str = PrivateAttr(default='occupancy')
    _component_schema_name: str = PrivateAttr(default='ChargeConnector-ids-Get200ApplicationJsonResponse')


ChargeConnectoridsGet200ApplicationJsonResponseModel = ChargeConnectoridsGet200ApplicationJsonResponse


class ChargeConnectorGet200ApplicationJsonResponse(BaseModel):
    """
    Autogenerated from occupancy::ChargeConnectorGet200ApplicationJsonResponse
    """

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

    _source_schema_name: str = PrivateAttr(default='occupancy')
    _component_schema_name: str = PrivateAttr(default='ChargeConnectorGet200ApplicationJsonResponse')


ChargeConnectorGet200ApplicationJsonResponseModel = ChargeConnectorGet200ApplicationJsonResponse


class BikePointsidsGet200ApplicationJsonResponse(BaseModel):
    """
    Autogenerated from occupancy::BikePoints-ids-Get200ApplicationJsonResponse
    """

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

    _source_schema_name: str = PrivateAttr(default='occupancy')
    _component_schema_name: str = PrivateAttr(default='BikePoints-ids-Get200ApplicationJsonResponse')


BikePointsidsGet200ApplicationJsonResponseModel = BikePointsidsGet200ApplicationJsonResponse


class Deserialisers(DtoEnum):
    Tfl = Bay
    Tfl_2 = CarParkOccupancy
    Tfl_3 = ChargeConnectorOccupancy
    Tfl_4 = BikePointOccupancy
    CarParkGet200ApplicationJsonResponse = CarParkGet200ApplicationJsonResponse
    ChargeConnector_ids_Get200ApplicationJsonResponse = ChargeConnectoridsGet200ApplicationJsonResponse
    ChargeConnectorGet200ApplicationJsonResponse = ChargeConnectorGet200ApplicationJsonResponse
    BikePoints_ids_Get200ApplicationJsonResponse = BikePointsidsGet200ApplicationJsonResponse