"""Standalone application-factory and runtime route checks."""

from __future__ import annotations

import sys
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 platform.runtime.app_factory import create_app


class StartupChecks(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.app = create_app(
            {
                "TESTING": True,
                "CHECK_CONTROL_DB_READINESS": False,
            }
        )
        cls.client = cls.app.test_client()

    def test_required_components_register(self):
        components = self.app.extensions["startup_components"]
        self.assertTrue(components["platform_api"]["ready"])
        self.assertTrue(components["wp_invoices"]["ready"])
        self.assertTrue(components["leave_form_app"]["ready"])

    def test_liveness_is_public(self):
        response = self.client.get("/health")
        self.assertEqual(200, response.status_code)
        self.assertEqual("liveness", response.get_json()["check"])

    def test_readiness_reports_ready_components(self):
        response = self.client.get("/ready")
        payload = response.get_json()
        self.assertEqual(200, response.status_code)
        self.assertEqual("ok", payload["status"])
        self.assertTrue(payload["control_database"]["ready"])

    def test_platform_connection_requires_jwt(self):
        response = self.client.get("/api/v1/platform/connection")
        self.assertEqual(401, response.status_code)


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