"""Tests for the EZ-Input plugin registry."""

from __future__ import annotations

import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent.parent))

from registry import PluginRegistry


def test_registry_discovers_health_check_plugin() -> None:
    plugin_dir = Path(__file__).parent.parent / "plugins"
    registry = PluginRegistry(plugin_dir)
    plugins = registry.discover()

    assert len(plugins) >= 1
    names = {p.name for p in plugins}
    assert "health_check" in names


def test_registry_caches_discovered_plugins() -> None:
    plugin_dir = Path(__file__).parent.parent / "plugins"
    registry = PluginRegistry(plugin_dir)
    first = registry.discover()
    second = registry.discover()
    assert first is second


def test_registry_refresh_returns_plugins() -> None:
    plugin_dir = Path(__file__).parent.parent / "plugins"
    registry = PluginRegistry(plugin_dir)
    plugins = registry.refresh()
    assert len(plugins) >= 1


def test_registry_health_report() -> None:
    plugin_dir = Path(__file__).parent.parent / "plugins"
    registry = PluginRegistry(plugin_dir)
    report = registry.health()

    assert report["registry"] == "ok"
    assert report["plugin_count"] == len(registry.discover())
    assert isinstance(report["plugins"], list)


def test_registry_register_all_adds_routes() -> None:
    from fastapi import FastAPI

    plugin_dir = Path(__file__).parent.parent / "plugins"
    registry = PluginRegistry(plugin_dir)
    app = FastAPI()

    registered = registry.register_all(app)
    assert len(registered) >= 1

    route_paths = {route.path for route in app.routes if hasattr(route, "path")}
    assert "/plugin/health" in route_paths
