# Path: src/amcrest/exceptions.py
# class CommError(AmcrestError):
#     """A communication error occurred."""
# 
# Path: src/amcrest/http.py
# _LOGGER = logging.getLogger(__name__)
# _KEEPALIVE_OPTS = HTTPConnection.default_socket_options + [
#     (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
# ]
# class SOHTTPAdapter(HTTPAdapter):
# class Http:
#     def __init__(self, *args, **kwargs) -> None:
#     def init_poolmanager(self, *args, **kwargs) -> None:
#     def __init__(
#         self,
#         host: str,
#         port: int,
#         user: str,
#         password: str,
#         *,
#         verbose: bool = True,
#         protocol: str = "http",
#         ssl_verify: bool = True,
#         retries_connection: Optional[int] = None,
#         timeout_protocol: TimeoutT = None,
#     ) -> None:
#     def _generate_token(self) -> None:
#     async def _async_generate_token(self) -> None:
#     def __repr__(self) -> str:
#     def as_dict(self) -> dict:
#     def __base_url(self, param: str = "") -> str:
#     def get_base_url(self) -> str:
#     def command(self, *args, **kwargs) -> requests.Response:
#     async def async_command(self, *args, **kwargs) -> httpx.Response:
#     async def async_stream_command(
#         self, *args, **kwargs
#     ) -> AsyncIterator[httpx.Response]:
#     def _command(
#         self,
#         cmd: str,
#         retries: Optional[int] = None,
#         timeout_cmd: TimeoutT = None,
#         stream: bool = False,
#     ) -> requests.Response:
#     async def _async_command(
#         self,
#         cmd: str,
#         retries: Optional[int] = None,
#         timeout_cmd: TimeoutT = None,
#     ) -> httpx.Response:
#     async def _async_stream_command(
#         self,
#         cmd: str,
#         timeout_cmd: TimeoutT = None,
#     ) -> AsyncIterator[httpx.Response]:
#     def command_audio(
#         self,
#         cmd: str,
#         file_content,
#         http_header,
#         timeout: TimeoutT = None,
#     ) -> None:
#     def _get_config(self, config_name: str) -> str:
#     async def _async_get_config(self, config_name: str) -> str:
#     def _magic_box(self, action: str) -> str:
#     async def _async_magic_box(self, action: str) -> str:
# 
# Path: src/amcrest/utils.py
# def pretty(value: str, delimiter: str = "=") -> str:
#     """Format string key=value."""
#     return value.strip().rpartition(delimiter)[2]


import logging
import re
from typing import (
    Any,
    AsyncIterator,
    AsyncIterable,
    Dict,
    Iterator,
    Iterable,
    List,
    Optional,
    Tuple,
)
from requests import RequestException
from urllib3.exceptions import HTTPError
from .exceptions import CommError
from .http import Http, TimeoutT
from .utils import pretty

    @property
    def event_ip_conflict(self) -> str:
        return self.event_handler_config("IPConflict")

    @property
    async def async_event_ip_conflict(self) -> str:
        return await self.async_event_handler_config("IPConflict")

    def event_channels_happened(self, eventcode: str) -> List[int]:
        """
        Params:

        VideoMotion: motion detection event
        VideoLoss: video loss detection event
        VideoBlind: video blind detection event
        AlarmLocal: alarm detection event
        StorageNotExist: storage not exist event
        StorageFailure: storage failure event
        StorageLowSpace: storage low space event
        AlarmOutput: alarm output event
        SmartMotionHuman: human detection event
        SmartMotionVehicle: vehicle detection event
        """
        ret = self.command(
            f"eventManager.cgi?action=getEventIndexes&code={eventcode}"
        )
        output = ret.content.decode()
        if "Error" in output:
            return []

# Path: src/amcrest/exceptions.py
# class CommError(AmcrestError):
#     """A communication error occurred."""
# 
# Path: src/amcrest/http.py
# _LOGGER = logging.getLogger(__name__)
# _KEEPALIVE_OPTS = HTTPConnection.default_socket_options + [
#     (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
# ]
# class SOHTTPAdapter(HTTPAdapter):
# class Http:
#     def __init__(self, *args, **kwargs) -> None:
#     def init_poolmanager(self, *args, **kwargs) -> None:
#     def __init__(
#         self,
#         host: str,
#         port: int,
#         user: str,
#         password: str,
#         *,
#         verbose: bool = True,
#         protocol: str = "http",
#         ssl_verify: bool = True,
#         retries_connection: Optional[int] = None,
#         timeout_protocol: TimeoutT = None,
#     ) -> None:
#     def _generate_token(self) -> None:
#     async def _async_generate_token(self) -> None:
#     def __repr__(self) -> str:
#     def as_dict(self) -> dict:
#     def __base_url(self, param: str = "") -> str:
#     def get_base_url(self) -> str:
#     def command(self, *args, **kwargs) -> requests.Response:
#     async def async_command(self, *args, **kwargs) -> httpx.Response:
#     async def async_stream_command(
#         self, *args, **kwargs
#     ) -> AsyncIterator[httpx.Response]:
#     def _command(
#         self,
#         cmd: str,
#         retries: Optional[int] = None,
#         timeout_cmd: TimeoutT = None,
#         stream: bool = False,
#     ) -> requests.Response:
#     async def _async_command(
#         self,
#         cmd: str,
#         retries: Optional[int] = None,
#         timeout_cmd: TimeoutT = None,
#     ) -> httpx.Response:
#     async def _async_stream_command(
#         self,
#         cmd: str,
#         timeout_cmd: TimeoutT = None,
#     ) -> AsyncIterator[httpx.Response]:
#     def command_audio(
#         self,
#         cmd: str,
#         file_content,
#         http_header,
#         timeout: TimeoutT = None,
#     ) -> None:
#     def _get_config(self, config_name: str) -> str:
#     async def _async_get_config(self, config_name: str) -> str:
#     def _magic_box(self, action: str) -> str:
#     async def _async_magic_box(self, action: str) -> str:
# 
# Path: src/amcrest/utils.py
# def pretty(value: str, delimiter: str = "=") -> str:
#     """Format string key=value."""
#     return value.strip().rpartition(delimiter)[2]


# Path: src/amcrest/event.py
import logging
import re
from typing import (
    Any,
    AsyncIterator,
    AsyncIterable,
    Dict,
    Iterator,
    Iterable,
    List,
    Optional,
    Tuple,
)
from requests import RequestException
from urllib3.exceptions import HTTPError
from .exceptions import CommError
from .http import Http, TimeoutT
from .utils import pretty


    @property
    def event_ip_conflict(self) -> str:
        return self.event_handler_config("IPConflict")

    @property
    async def async_event_ip_conflict(self) -> str:
        return await self.async_event_handler_config("IPConflict")

    def event_channels_happened(self, eventcode: str) -> List[int]:
        """
        Params:

        VideoMotion: motion detection event
        VideoLoss: video loss detection event
        VideoBlind: video blind detection event
        AlarmLocal: alarm detection event
        StorageNotExist: storage not exist event
        StorageFailure: storage failure event
        StorageLowSpace: storage low space event
        AlarmOutput: alarm output event
        SmartMotionHuman: human detection event
        SmartMotionVehicle: vehicle detection event
        """
        ret = self.command(
            f"eventManager.cgi?action=getEventIndexes&code={eventcode}"
        )
        output = ret.content.decode()
        if "Error" in output:
            return []

        return [int(pretty(channel)) for channel in output.split()]