from __future__ import annotations

import importlib.util
from pathlib import Path
import sys
import tempfile
import unittest

SCRIPT = Path(__file__).resolve().parents[1] / "scripts" / "bootstrap_provider_profiles.py"
SPEC = importlib.util.spec_from_file_location("provider_bootstrap", SCRIPT)
assert SPEC and SPEC.loader
MODULE = importlib.util.module_from_spec(SPEC)
sys.modules[SPEC.name] = MODULE
SPEC.loader.exec_module(MODULE)


class ProviderBootstrapTests(unittest.TestCase):
    def test_web_selects_preview_and_guardrails(self) -> None:
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory)
            (root / "package.json").write_text("{}", encoding="utf-8")
            (root / "vite.config.ts").write_text("", encoding="utf-8")
            result = MODULE.outputs(root)
            self.assertIn("pages-or-workers", result[root / ".agentic/providers/cloudflare.yaml"])
            self.assertIn("guardrails_mode: AVAILABLE", result[root / ".agentic/providers/codacy.yaml"])

    def test_dotnet_uses_artifacts_without_forced_workers(self) -> None:
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory)
            (root / "Tool.csproj").write_text("<Project />", encoding="utf-8")
            result = MODULE.outputs(root)
            cloudflare = result[root / ".agentic/providers/cloudflare.yaml"]
            codacy = result[root / ".agentic/providers/codacy.yaml"]
            self.assertIn("r2-artifact-distribution", cloudflare)
            self.assertIn("forced-workers-runtime-migration", cloudflare)
            self.assertIn("guardrails_mode: NOT_APPLICABLE_TO_CAPABILITY", codacy)
            self.assertIn("dotnet-analyzers", codacy)

    def test_dry_run_writes_nothing(self) -> None:
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory)
            self.assertEqual(0, MODULE.main(["--repo-root", str(root)]))
            self.assertFalse((root / ".agentic").exists())

    def test_write_and_force(self) -> None:
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory)
            self.assertEqual(0, MODULE.main(["--repo-root", str(root), "--write"]))
            self.assertTrue((root / ".agentic/providers/cloudflare.yaml").is_file())
            self.assertTrue((root / ".agentic/providers/codacy.yaml").is_file())
            self.assertEqual(3, MODULE.main(["--repo-root", str(root), "--write"]))
            self.assertEqual(0, MODULE.main(["--repo-root", str(root), "--write", "--force"]))


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