from async_property import async_property
from connectsensor.const import APIResponse as APIResponse
from datetime import datetime

class _BaseTank:
    def __init__(self, client: object, signalman_no: str) -> None: ...
    def unpack_tank_data(self, response: APIResponse) -> None: ...
    def format_reading_date(self, date: datetime | str) -> datetime: ...
    def transform_history_data(self, data: APIResponse) -> APIResponse: ...

class Tank(_BaseTank):
    @property
    def level(self) -> int: ...
    @property
    def serial_number(self) -> str: ...
    @property
    def model(self) -> str: ...
    @property
    def name(self) -> str: ...
    @property
    def capacity(self) -> int: ...
    @property
    def last_read(self) -> datetime: ...
    @property
    def history(self) -> APIResponse: ...

class AsyncTank(_BaseTank):
    @async_property
    async def level(self) -> int: ...
    @async_property
    async def serial_number(self) -> str: ...
    @async_property
    async def model(self) -> str: ...
    @async_property
    async def name(self) -> str: ...
    @async_property
    async def capacity(self) -> int: ...
    @async_property
    async def last_read(self) -> datetime: ...
    @async_property
    async def history(self) -> APIResponse: ...
