import json
import os
import tempfile
import unittest
from pathlib import Path

import web_sentinel.license.runtime_bridge as runtime_bridge
from web_sentinel.subscription import SubscriptionTier


class TestLicenseFreeBootstrap(unittest.TestCase):
    def setUp(self) -> None:
        self._tmpdir_obj = tempfile.TemporaryDirectory()
        self.temp_home = Path(self._tmpdir_obj.name)
        os.environ["HOME"] = str(self.temp_home)
        os.environ["USERPROFILE"] = str(self.temp_home)
        runtime_bridge._GLOBAL_BRIDGE = None

    def tearDown(self) -> None:
        runtime_bridge._GLOBAL_BRIDGE = None
        self._tmpdir_obj.cleanup()
        os.environ.pop("HOME", None)
        os.environ.pop("USERPROFILE", None)

    def test_initialize_generates_free_license_when_missing(self) -> None:
        result = runtime_bridge.initialize_license_system()
        self.assertTrue(result)

        bridge = runtime_bridge.get_license_bridge()
        self.assertEqual(bridge.subscription_manager.tier, SubscriptionTier.FREE)

        licence_path = Path.home() / ".web-sentinel" / "license.lic"
        self.assertTrue(licence_path.exists())

        data = json.loads(licence_path.read_text(encoding="utf-8"))
        self.assertEqual(data["config"]["subscription"]["tier"], "FREE")
        self.assertIn("signature", data)

    def test_corrupted_license_triggers_regeneration(self) -> None:
        licence_path = Path.home() / ".web-sentinel" / "license.lic"
        licence_path.parent.mkdir(parents=True, exist_ok=True)
        licence_path.write_text("corrupted-licence", encoding="utf-8")

        runtime_bridge._GLOBAL_BRIDGE = None
        result = runtime_bridge.initialize_license_system()
        self.assertTrue(result)

        data = json.loads(licence_path.read_text(encoding="utf-8"))
        self.assertEqual(data["config"]["subscription"]["tier"], "FREE")
        self.assertIn("signature", data)


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