# #region Test.RouterThinModules [C:2] [TYPE Module] [SEMANTICS test,router,fastapi,api]
# @BRIEF Tests for thin router modules: dashboards/_router.py, git/_router.py,
#        translate/_router.py, maintenance/_router.py.
#        These modules define APIRouter instances used by route handlers.
# @RELATION BINDS_TO -> [DashboardsRouter]
# @RELATION BINDS_TO -> [GitRouter]
# @RELATION BINDS_TO -> [TranslateRouterModule]
# @RELATION BINDS_TO -> [MaintenanceRouter]
# @TEST_CONTRACT: dashboards router -> prefix=/api/dashboards, tags=["Dashboards"]
# @TEST_CONTRACT: git router -> no prefix, tags=["git"]
# @TEST_CONTRACT: translate router -> prefix=/api/translate, tags=["translate"], feature-gated
# @TEST_CONTRACT: maintenance router -> prefix=/api/maintenance, tags=["Maintenance"]
# @TEST_EDGE: router_instances_are_APIRouter -> verify type
# @TEST_EDGE: translate_router_dependencies -> require_feature dependency present

import pytest
from fastapi import APIRouter


class TestDashboardsRouter:
    """Dashboards router — prefix and tags."""

    def test_router_type(self):
        from src.api.routes.dashboards._router import router
        assert isinstance(router, APIRouter)

    def test_router_prefix(self):
        from src.api.routes.dashboards._router import router
        assert router.prefix == "/api/dashboards"

    def test_router_tags(self):
        from src.api.routes.dashboards._router import router
        assert "Dashboards" in router.tags

    def test_router_has_routes(self):
        from src.api.routes.dashboards._router import router
        # The routes are added by other modules importing this router
        assert hasattr(router, "routes")


class TestGitRouter:
    """Git router — no prefix, git tag."""

    def test_router_type(self):
        from src.api.routes.git._router import router
        assert isinstance(router, APIRouter)

    def test_router_no_prefix(self):
        from src.api.routes.git._router import router
        # Git router doesn't set prefix (routes set their own prefixes)
        assert router.prefix == ""

    def test_router_tags(self):
        from src.api.routes.git._router import router
        assert "git" in router.tags


class TestTranslateRouter:
    """Translate router — prefix, tags, feature flag dependency."""

    def test_router_type(self):
        from src.api.routes.translate._router import router
        assert isinstance(router, APIRouter)

    def test_router_prefix(self):
        from src.api.routes.translate._router import router
        assert router.prefix == "/api/translate"

    def test_router_tags(self):
        from src.api.routes.translate._router import router
        assert "translate" in router.tags

    def test_router_has_dependencies(self):
        from src.api.routes.translate._router import router
        assert len(router.dependencies) > 0

    def test_router_dependency_is_require_feature(self):
        from src.api.routes.translate._router import router
        from fastapi import params

        deps = router.dependencies
        assert len(deps) >= 1
        dep = deps[0]
        # The dependency is a Depends(require_feature("translate"))
        assert isinstance(dep, params.Depends)


class TestMaintenanceRouter:
    """Maintenance router — prefix and tags."""

    def test_router_type(self):
        from src.api.routes.maintenance._router import router
        assert isinstance(router, APIRouter)

    def test_router_prefix(self):
        from src.api.routes.maintenance._router import router
        assert router.prefix == "/api/maintenance"

    def test_router_tags(self):
        from src.api.routes.maintenance._router import router
        tags_lower = [t.lower() for t in router.tags]
        assert "maintenance" in tags_lower

    def test_routes_are_imported(self):
        """Verify that the _routes module is imported in _router.py."""
        from src.api.routes.maintenance import _router
        # The import `from . import _routes` in _router.py registers routes
        # on the router. If the import is successful and routes exist, it works.
        assert hasattr(_router, "router")
        # Check that the router has non-trivial number of routes
        # (list_events, start, end, end-all, settings GET, settings PUT = 6)
        assert len(_router.router.routes) >= 1


# #endregion Test.RouterThinModules
