"""Safety checks for deterministic WordPress Bridge packages."""

from __future__ import annotations

import json
import sys
import tempfile
import unittest
from pathlib import Path

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"]

from bridge_platform.packages.wordpress_bridge import build_bridge_release


class WordPressBridgePackageChecks(unittest.TestCase):
    def test_runtime_version_must_match_signed_manifest(self):
        with tempfile.TemporaryDirectory() as directory:
            root = Path(directory)
            source = root / "wp-flask-bridge"
            core = source / "includes" / "security"
            core.mkdir(parents=True)
            (source / "Installer.php").write_text(
                "<?php\n/**\n * Version: 0.3.9-dev\n */\n",
                encoding="utf-8",
            )
            (source / "bridge-release.json").write_text(
                json.dumps({
                    "version": "0.3.9-dev",
                    "channel": "development",
                    "minimum_wordpress_version": "6.0",
                    "minimum_php_version": "8.0",
                    "release_notes": ["Version safety"],
                }),
                encoding="utf-8",
            )
            (core / "bridge-core.php").write_text(
                "<?php\nfinal class Core { private const BRIDGE_VERSION = '0.3.8-dev'; }\n",
                encoding="utf-8",
            )

            with self.assertRaisesRegex(ValueError, "Runtime Core version"):
                build_bridge_release(source, root / "output", root / "missing.key")


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