# Imports to use at __all__
from propan import __about__ as about
from propan.cli.app import *  # noqa: F403
from propan.log import *  # noqa: F403
from propan.utils import *  # noqa: F403

try:
    from propan.brokers.rabbit import RabbitBroker
except Exception:
    RabbitBroker = about.INSTALL_RABBIT  # type: ignore

try:
    from propan.brokers.nats import NatsBroker
except Exception:
    NatsBroker = about.INSTALL_NATS  # type: ignore

try:
    from propan.brokers.redis import RedisBroker
except Exception:
    RedisBroker = about.INSTALL_REDIS  # type: ignore

try:
    from propan.brokers.kafka import KafkaBroker
except Exception:
    KafkaBroker = about.INSTALL_KAFKA  # type: ignore

try:
    from propan.brokers.sqs import SQSBroker
except Exception:
    SQSBroker = about.INSTALL_SQS  # type: ignore

assert any(
    (RabbitBroker, NatsBroker, RedisBroker, SQSBroker, KafkaBroker)
), about.INSTALL_MESSAGE

__all__ = (  # noqa: F405
    # app
    "PropanApp",
    # log
    "logger",
    "access_logger",
    # utils
    ## types
    "apply_types",
    ## context
    "context",
    "Context",
    "ContextRepo" "Alias",
    "Depends",
    # brokers
    "NatsBroker",
    "RabbitBroker",
    "RedisBroker",
    "KafkaBroker",
    "SQSBroker",
)
