"""Domain event bus infrastructure.

This package provides:

- :class:`EventType` — enumeration of all domain event types.
- :class:`DomainEvent` — base Pydantic model for all domain events.
- :class:`EventBus` — structural Protocol that implementations satisfy.
- :class:`ReactiveEventBus` — RxPY-backed in-process bus.
- :class:`LoggingEventBus` — structured-log-only bus.

Typical usage::

    from cleveragents.infrastructure.events import (
        DomainEvent,
        EventBus,
        EventType,
        ReactiveEventBus,
    )

    bus = ReactiveEventBus()
    bus.subscribe(EventType.DECISION_CREATED, lambda e: print(e))
    bus.emit(DomainEvent(event_type=EventType.DECISION_CREATED))
"""

from cleveragents.infrastructure.events.logging_bus import LoggingEventBus
from cleveragents.infrastructure.events.models import DomainEvent
from cleveragents.infrastructure.events.protocol import EventBus
from cleveragents.infrastructure.events.reactive import ReactiveEventBus
from cleveragents.infrastructure.events.types import EventType

__all__ = [
    "DomainEvent",
    "EventBus",
    "EventType",
    "LoggingEventBus",
    "ReactiveEventBus",
]
