"""Agent tool discovery and tenant filtering checks."""

from __future__ import annotations

import sys
import unittest
from pathlib import Path
from unittest.mock import patch

PROJECT_ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(PROJECT_ROOT))
loaded_platform = sys.modules.get("platform")
if loaded_platform is not None and not hasattr(loaded_platform, "__path__"):
    del sys.modules["platform"]

import apps.abn_lookup_app as abn_app
from bridge_platform.gateway.platform_api import _tenant_agent_tools


class AgentCatalogChecks(unittest.TestCase):
    def test_catalog_contains_only_tools_from_enabled_apps(self):
        entitlements = {"apps": [
            {"app_id": "abn_lookup_app", "enabled": True},
            {"app_id": "disabled_app", "enabled": False},
        ]}
        with patch(
            "platform.gateway.platform_api.get_effective_entitlements",
            return_value=entitlements,
        ), patch(
            "platform.gateway.platform_api.load_manifest",
            return_value=abn_app.APP_MANIFEST,
        ) as load:
            tools = _tenant_agent_tools("tenant-a", compact=True)
        self.assertEqual(["business.au.abn.lookup"], [tool["capability"] for tool in tools])
        load.assert_called_once_with("abn_lookup_app")

    def test_full_catalog_has_schema_but_no_credentials_or_source(self):
        with patch(
            "platform.gateway.platform_api.get_effective_entitlements",
            return_value={"apps": [{"app_id": "abn_lookup_app", "enabled": True}]},
        ), patch(
            "platform.gateway.platform_api.load_manifest",
            return_value=abn_app.APP_MANIFEST,
        ):
            tool = _tenant_agent_tools("tenant-a", compact=False)[0]
        self.assertEqual("^[0-9]{11}$", tool["input_schema"]["properties"]["abn"]["pattern"])
        serialized = repr(tool).lower()
        self.assertNotIn("abr_lookup_guid", serialized)
        self.assertNotIn("source", serialized)


if __name__ == "__main__":
    unittest.main(verbosity=2)
