from typing import Union, Any, TYPE_CHECKING, Protocol

import aiohttp
from yarl import URL

if TYPE_CHECKING:
    from pyhon.parameter.base import HonParameter
    from pyhon.parameter.enum import HonParameterEnum
    from pyhon.parameter.fixed import HonParameterFixed
    from pyhon.parameter.program import HonParameterProgram
    from pyhon.parameter.range import HonParameterRange


class Callback(Protocol):  # pylint: disable=too-few-public-methods
    def __call__(
        self, url: str | URL, *args: Any, **kwargs: Any
    ) -> aiohttp.client._RequestContextManager:
        ...


Parameter = Union[
    "HonParameter",
    "HonParameterRange",
    "HonParameterEnum",
    "HonParameterFixed",
    "HonParameterProgram",
]
