import pytest

from yee88 import plugins, transports
from yee88.config import ConfigError
from tests.plugin_fixtures import FakeEntryPoint, install_entrypoints


class DummyTransport:
    id = "telegram"
    description = "Telegram"

    def check_setup(self, *args, **kwargs):
        raise NotImplementedError

    async def interactive_setup(self, *, force: bool) -> bool:
        raise NotImplementedError

    def lock_token(self, *, transport_config: object, _config_path):
        _ = transport_config, _config_path
        raise NotImplementedError

    def build_and_run(
        self,
        *,
        transport_config: object,
        config_path,
        runtime,
        final_notify: bool,
        default_engine_override: str | None,
    ) -> None:
        _ = (
            transport_config,
            config_path,
            runtime,
            final_notify,
            default_engine_override,
        )
        raise NotImplementedError


@pytest.fixture
def transport_entrypoints(monkeypatch):
    entrypoints = [
        FakeEntryPoint(
            "telegram",
            "yee88.telegram.backend:telegram_backend",
            plugins.TRANSPORT_GROUP,
            loader=DummyTransport,
        )
    ]
    install_entrypoints(monkeypatch, entrypoints)
    return entrypoints


def test_transport_registry_lists_telegram(transport_entrypoints) -> None:
    ids = transports.list_transports()
    assert "telegram" in ids


def test_transport_registry_gets_telegram(transport_entrypoints) -> None:
    backend = transports.get_transport("telegram")
    assert backend.id == "telegram"


def test_transport_registry_unknown(transport_entrypoints) -> None:
    with pytest.raises(ConfigError, match="Unknown transport"):
        transports.get_transport("nope")
