"""
Type stubs for Cyberwave client with asset-specific return types.

This file is auto-generated by stubs_generator.py
Do not edit manually.
"""

from typing import Literal, Optional, overload

from .twin import (
    Twin,
    CameraTwin,
    DepthCameraTwin,
    FlyingTwin,
    GripperTwin,
    FlyingCameraTwin,
    GripperCameraTwin,
    LocomoteTwin,
    LocomoteCameraTwin,
    LocomoteGripperTwin,
    LocomoteGripperCameraTwin,
    LocomoteGripperDepthCameraTwin,
    LocomoteDepthCameraTwin,
    LocomoteCameraTwin,
)
from .camera import CameraStreamer
from .controller import EdgeController
from .mqtt_client import CyberwaveMQTTClient
from .resources import (
    WorkspaceManager,
    ProjectManager,
    EnvironmentManager,
    AssetManager,
    EdgeManager,
    TwinManager,
)
from .config import CyberwaveConfig
from .utils import TimeReference


class Cyberwave:
    """Main client for the Cyberwave Digital Twin Platform."""
    
    config: CyberwaveConfig
    workspaces: WorkspaceManager
    projects: ProjectManager
    environments: EnvironmentManager
    assets: AssetManager
    edges: EdgeManager
    twins: TwinManager
    
    def __init__(
        self,
        base_url: str | None = None,
        token: str | None = None,
        api_key: str | None = None,
        mqtt_host: str | None = None,
        mqtt_port: int | None = None,
        mqtt_username: str | None = None,
        mqtt_api_token: str | None = None,
        mqtt_password: str | None = None,
        mqtt_use_tls: bool = False,
        mqtt_tls_ca_cert: str | None = None,
        **config_kwargs,
    ) -> None: ...
    
    @property
    def mqtt(self) -> CyberwaveMQTTClient: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["the-robot-studio/so101"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["rethink-robotics/baxter"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["kawada-industries/nextage"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["rethink-robotics/sawyer"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["berkeley/berkeley-humanoid"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["unitree/laikago"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["gepetto/bolt"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["agility-robotics/cassie"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["g-levine/rhea"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["ben-bokser/spryped"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["upkie/upkie"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["timqian/bambot-b0-base"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["robotis/turtlebot3-waffle"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["robotis/turtlebot3-waffle-pi"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["robotis/turtlebot3-burger"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["cyberwave/substation"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["agilox/agilox-ofl"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["otto-motors/otto-1500"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["agile-x-robotics/tracer-20"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["agile-x-robotics/piper"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["arx-roboticsx/r5a"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["kinova/jaco"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["interbotix/vx300s"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["poppy-project/poppy-torso"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["orebro-university/yumi"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["interbotix/wx250s"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["kinova-robotics/kortex-gen3"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["comau/edo"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["rt-net/sciurus17"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["dexsuite/leap-hand-leap"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["unitree/unitree_z1"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["universal_robots/UR7"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["open/openarm"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> GripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["anybotics/anymal-b"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteDepthCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["unitree/go2"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteDepthCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["skydio/skydio-x2"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["SZ-DJI-Technology/DJI-Tello"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["prox-dynamics/black-hornet-nano"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["SZ-DJI-Technology/DJI-Mini-3-Pro"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["SZ-DJI-Technology/DJI-Mini-4-Pro"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["Holybro/PX4Vision"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["hoverspect/Avientory-Platform"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["unitree/unitree-g1"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteGripperDepthCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["booster-robotics/t1"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteGripperDepthCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["fourier/fftai-gr1t1"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteGripperDepthCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["arx/arx-roboticsx"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteGripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["timqian/bambot-b0"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteGripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["kuka/kuka_iiwa14"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteGripperTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["bitcraze/crazyflie"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["bitcraze/crazyflie-2"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> FlyingTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["boston-dynamics/spot"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["fftai/gr2"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["disney/bdx"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["robotis/op3"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["anybotics/anymal-c"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["fourier/fftai-gr1t2"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["unitree/unitree_go1"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["unitree/unitree-b1"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["unitree/unitree_a1"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["fictionlab/leo-rover"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["cyberwave/standard-cam"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["cyberwave/generic-auv"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["waveshare/ugv-beast"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["alto-robotics/node"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["up/mir-250"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["unitree/unitree-h1"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteGripperCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["the-robot-studio/so101-with-camera"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> LocomoteGripperCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["intel/realsensed455"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> DepthCameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["basler/basler_ag_ace_gige"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> CameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["logitech/c275"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> CameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["raspberry/pi-camerav3"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> CameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["cyberwave/generic_ipcamera"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> CameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: Literal["logitech/c920"],
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> CameraTwin: ...
    
    @overload
    def twin(
        self,
        asset_key: str,
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> Twin: ...
    
    def twin(
        self,
        asset_key: str,
        environment_id: str | None = None,
        twin_id: str | None = None,
        **kwargs,
    ) -> Twin: ...
    
    def video_stream(
        self,
        twin_uuid: str,
        camera_id: int = 0,
        fps: int = 10,
        turn_servers: list | None = None,
        time_reference: TimeReference | None = None,
    ) -> CameraStreamer: ...
    
    def controller(self, twin_uuid: str) -> EdgeController: ...
    
    def configure(
        self,
        base_url: str | None = None,
        token: str | None = None,
        api_key: str | None = None,
        environment_id: str | None = None,
        workspace_id: str | None = None,
        **kwargs,
    ) -> None: ...
    
    def disconnect(self) -> None: ...
    
    def __enter__(self) -> "Cyberwave": ...
    def __exit__(self, exc_type, exc_val, exc_tb) -> None: ...
