"""Tests for internal web UI skeleton (#426)."""
import sys
import unittest
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from starlette.testclient import TestClient

from webui.app import create_app


class TestWebuiSkeleton(unittest.TestCase):
    def setUp(self):
        self.client = TestClient(create_app())

    def test_health_returns_json(self):
        response = self.client.get("/health")
        self.assertEqual(response.status_code, 200)
        data = response.json()
        self.assertEqual(data["status"], "ok")
        self.assertEqual(data["service"], "mcp-control-plane-webui")
        self.assertEqual(data["mode"], "read-only-mvp")
        self.assertIn("timestamp", data)
        self.assertIn("deployment", data)
        self.assertEqual(data["deployment"]["mode"], "internal-operator-console")

    def test_home_renders(self):
        response = self.client.get("/")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Operator console", response.text)
        self.assertIn("Read-only MVP", response.text)

    def test_runtime_is_implemented(self):
        response = self.client.get("/runtime")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Runtime health", response.text)

    def test_audit_is_implemented(self):
        response = self.client.get("/audit")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Report audit", response.text)

    def test_prompts_is_implemented(self):
        response = self.client.get("/prompts")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Prompt library", response.text)

    def test_projects_is_implemented(self):
        response = self.client.get("/projects")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Gitea-Tools", response.text)

    def test_worktrees_is_implemented(self):
        response = self.client.get("/worktrees")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Worktree hygiene", response.text)

    def test_leases_is_implemented(self):
        response = self.client.get("/leases")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Leases", response.text)
        self.assertIn("Collision warnings", response.text)


    def test_actions_is_implemented(self):
        response = self.client.get("/actions")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Gated actions", response.text)

    def test_post_is_rejected(self):
        response = self.client.post("/health")
        self.assertEqual(response.status_code, 405)
        self.assertEqual(response.json()["error"], "read-only-mvp")

    def test_queue_route_renders(self):
        response = self.client.get("/queue")
        self.assertEqual(response.status_code, 200)
        self.assertIn("Live queue", response.text)

    def test_nav_links_on_all_pages(self):
        paths = ("/", "/queue", "/projects", "/prompts", "/runtime", "/audit", "/worktrees", "/leases", "/actions")
        hrefs = ("/queue", "/projects", "/prompts", "/runtime", "/audit", "/worktrees", "/leases", "/actions")
        for path in paths:
            with self.subTest(path=path):
                text = self.client.get(path).text
                for href in hrefs:
                    self.assertIn(f'href="{href}"', text)


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