"""Standalone ABN Lookup Standard v1 migration 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 app


CONTEXT = {
    "request_id": "request-1",
    "tenant": {"tenant_id": "tenant-a"},
    "app_id": "abn_lookup_app",
    "payload": {},
}


class AbnAppContractChecks(unittest.TestCase):
    def test_manifest_is_valid_and_exports_lookup(self):
        self.assertEqual([], app.APP_MANIFEST.validate())
        self.assertEqual(
            "lookup_v1",
            app.APP_MANIFEST.action_for_capability("business.au.abn.lookup"),
        )

    def test_health_does_not_contact_provider(self):
        with patch.object(app, "_guid", return_value=None), patch.object(app, "lookup_abn_v1") as lookup:
            payload = app.handle_request(CONTEXT, "health_v1")
        self.assertEqual("ok", payload["status"])
        self.assertFalse(payload["data"]["credential_configured"])
        lookup.assert_not_called()

    def test_missing_credential_returns_stable_error(self):
        context = {**CONTEXT, "payload": {"abn": "51824753556"}}
        with patch.object(app, "_guid", return_value=None):
            payload, status = app.handle_request(context, "lookup_v1")
        self.assertEqual(409, status)
        self.assertEqual("credential_not_configured", payload["error"]["code"])

    def test_lookup_uses_vault_value_without_returning_it(self):
        context = {**CONTEXT, "payload": {"abn": "51824753556"}}
        record = {"abn": "51824753556", "entity_name": "Example"}
        with patch.object(app, "_guid", return_value="secret-guid"), patch.object(
            app, "lookup_abn_v1", return_value=record,
        ) as lookup:
            payload = app.handle_request(context, "lookup_v1")
        lookup.assert_called_once_with("51824753556", include_history=False, guid="secret-guid")
        self.assertEqual(record, payload["data"]["record"])
        self.assertNotIn("secret-guid", str(payload))

    def test_legacy_health_remains_compatible(self):
        payload = app.handle_request(CONTEXT, "test")
        self.assertEqual("ok", payload["status"])
        self.assertEqual("abn_lookup_app", payload["app"])


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