"""Structural tests for the DB-maintenance admin routes + scheduler surface."""


def test_admin_handlers_callable():
    from scribe.routes import admin as admin_routes
    for name in (
        "get_db_maintenance",
        "update_db_maintenance",
        "run_db_maintenance_now",
        "get_db_maintenance_health",
    ):
        assert callable(getattr(admin_routes, name))


def test_db_maintenance_routes_registered():
    from scribe.app import create_app
    app = create_app()
    rules = {r.rule for r in app.url_map.iter_rules()}
    assert "/api/admin/db-maintenance" in rules
    assert "/api/admin/db-maintenance/run" in rules
    assert "/api/admin/db-maintenance/health" in rules


def test_scheduler_surface():
    from scribe.services import db_maintenance_scheduler as sched
    for fn in (
        "start_db_maintenance_scheduler",
        "stop_db_maintenance_scheduler",
        "reschedule_db_maintenance",
        "get_maintenance_hour",
        "is_maintenance_enabled",
    ):
        assert callable(getattr(sched, fn)), f"scheduler missing {fn}"


def test_service_surface_and_allowlist():
    from scribe.services.db_maintenance import (
        MAINTENANCE_TABLES,
        get_last_run,
        get_table_health,
        run_maintenance,
    )
    assert callable(run_maintenance) and callable(get_last_run) and callable(get_table_health)
    # The allowlist is a closed tuple covering exactly the high-churn tables.
    assert isinstance(MAINTENANCE_TABLES, tuple)
    assert set(MAINTENANCE_TABLES) == {
        "app_logs", "notifications", "password_reset_tokens",
        "invitation_tokens", "notes", "note_versions",
    }


def test_set_admin_setting_exists():
    from scribe.services.settings import set_admin_setting
    assert callable(set_admin_setting)
