# api.py/Open GoPro, Version 2.0 (C) Copyright 2021 GoPro, Inc. (http://gopro.com/OpenGoPro).
# This copyright was auto-generated on Tue Sep  7 21:35:52 UTC 2021

"""Implementation of Open GoPro API version 2.0"""

from __future__ import annotations

from typing import Final

from open_gopro.domain.communicator_interface import GoProHttp, GoProWirelessInterface

from .ble_commands import BleAsyncResponses, BleCommands
from .ble_settings import BleSettings
from .ble_statuses import BleStatuses
from .http_commands import HttpCommands
from .http_settings import HttpSettings


class WirelessApi:
    """Implementation of Open GoPro API version 2.0 for Wireless interface (Wifi and BLE)

    Attributes:
        version (Final[str]): The API version that this object implements

    Args:
        communicator (GoProWirelessInterface): used to communicate via BLE and Wifi
    """

    version: Final[str] = "2.0"

    def __init__(self, communicator: GoProWirelessInterface) -> None:
        self._communicator = communicator
        self.ble_command = BleCommands(communicator)
        self.ble_setting = BleSettings(communicator)
        self.ble_status = BleStatuses(communicator)
        BleAsyncResponses.add_parsers()
        self.http_command = HttpCommands(communicator)
        self.http_setting = HttpSettings(communicator)


class WiredApi:
    """Implementation of Open GoPro API version 2.0 for Wired interface (USB)

    Attributes:
        version (Final[str]): The API version that this object implements

    Args:
        communicator (GoProHttp): used to communicate via BLE and Wifi
    """

    version: Final[str] = "2.0"

    def __init__(self, communicator: GoProHttp) -> None:
        self._communicator = communicator
        self.http_command = HttpCommands(communicator)
        self.http_setting = HttpSettings(communicator)
