import aiohttp from typing import Any, Dict from tessie_api.literals import ClimateKeeperMode, Seat from .tessie_wrapper import tessieRequest async def start_climate_preconditioning( session: aiohttp.ClientSession, vin: str, api_key: str, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/start_climate", api_key, params={ "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def stop_climate( session: aiohttp.ClientSession, vin: str, api_key: str, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/stop_climate", api_key, params={ "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def set_temperature( session: aiohttp.ClientSession, vin: str, api_key: str, temperature: int, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/set_temperatures", api_key, params={ "temperature": temperature, "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def set_seat_heat( session: aiohttp.ClientSession, vin: str, api_key: str, seat: Seat, level: int = 3, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/set_seat_heat", api_key, params={ "seat": seat, "level": level, "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def set_seat_cool( session: aiohttp.ClientSession, vin: str, api_key: str, seat: Seat, level: int = 3, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/set_seat_cool", api_key, params={ "seat": seat, "level": level, "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def start_defrost( session: aiohttp.ClientSession, vin: str, api_key: str, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/start_max_defrost", api_key, params={ "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def stop_defrost( session: aiohttp.ClientSession, vin: str, api_key: str, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/stop_max_defrost", api_key, params={ "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def start_steering_wheel_heater( session: aiohttp.ClientSession, vin: str, api_key: str, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/start_steering_wheel_heater", api_key, params={ "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def stop_steering_wheel_heater( session: aiohttp.ClientSession, vin: str, api_key: str, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/stop_steering_wheel_heater", api_key, params={ "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def set_bioweapon_defense_mode( session: aiohttp.ClientSession, vin: str, api_key: str, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/set_bioweapon_mode", api_key, params={ "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, ) async def set_climate_keeper_mode( session: aiohttp.ClientSession, vin: str, api_key: str, mode: ClimateKeeperMode, retry_duration: int = 40, wait_for_completion: bool = True, ) -> Dict[str, Any]: return await tessieRequest( session, "GET", f"/{vin}/command/set_climate_keeper_mode", api_key, params={ "mode": mode, "retry_duration": retry_duration, "wait_for_completion": str(wait_for_completion).lower(), }, )