"""Channel adapter contracts for gateway-facing integrations."""

from __future__ import annotations

from typing import Any, Protocol

from beaver.foundation.events import InboundMessage, OutboundMessage


class ChannelAdapter(Protocol):
    """Minimal contract every runtime channel adapter must implement."""

    channel_id: str
    kind: str
    mode: str

    async def start(self) -> None:
        """Prepare the channel before messages are routed."""

    async def stop(self) -> None:
        """Stop accepting/routing channel messages."""

    async def send(self, message: OutboundMessage) -> None:
        """Deliver an outbound message to the concrete channel."""


class ChannelInboundSink(Protocol):
    """Runtime callback used by adapters to submit normalized inbound messages."""

    async def accept_inbound(self, message: InboundMessage) -> Any:
        """Accept a normalized inbound message from an adapter."""
