#!/usr/bin/env python3
"""
Python Unittest Suite for ANL Homepage E2E Verification
Parses prerendered SSG HTML files to assert DOM structure, text content, and theme attributes.
"""

import unittest
import os
import re

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SERVER_APP_DIR = os.path.join(BASE_DIR, ".next", "server", "app")
if not os.path.exists(SERVER_APP_DIR):
    for candidate in [
        os.path.join(os.getcwd(), "refer_landing_page", ".next", "server", "app"),
        os.path.join(os.getcwd(), "website", ".next", "server", "app"),
        os.path.join(os.getcwd(), ".next", "server", "app"),
    ]:
        if os.path.exists(candidate):
            SERVER_APP_DIR = candidate
            break

class TestANLHomepageE2E(unittest.TestCase):

    def read_html(self, relative_path):
        full_path = os.path.join(SERVER_APP_DIR, relative_path)
        self.assertTrue(os.path.exists(full_path), f"File {relative_path} does not exist")
        with open(full_path, "r", encoding="utf-8") as f:
            return f.read()

    def test_01_home_page_structure(self):
        """TC-T1-F3: Verify Home page SSG HTML content and semantic structures."""
        html = self.read_html("index.html")
        
        # 1. Brand & Header titles
        self.assertIn("AI 에이전트 네트워크 연구실", html)
        self.assertIn("AI Agent Networking Lab (ANL)", html)
        
        # 2. Core Pillars keywords
        self.assertIn("MCP", html)
        self.assertIn("Multi-Agent Systems", html)
        self.assertIn("Interoperability Standards", html)
        self.assertIn("High-Performance Backbone", html)

        # 3. Location / Address section
        self.assertIn("address", html.lower())
        self.assertIn("경북대학교 IT대학 5호관", html)
        self.assertIn("sjkoh@knu.ac.kr", html)

    def test_02_members_page_content(self):
        """TC-T1-F4: Verify Members page active members & alumni records."""
        html = self.read_html("members.html")
        
        # Professor profile
        self.assertIn("고석주", html)
        self.assertIn("Seok-Joo Koh", html)
        self.assertIn("sjkoh@knu.ac.kr", html)
        
        # Members content sanity checks
        self.assertIn("Members", html)

    def test_03_publications_category_routes(self):
        """TC-T1-F5: Verify Publications categories SSG static pages."""
        cats = [
            ("intl-journal-conf.html", "International Journal"),
            ("domestic-journal-conf.html", "Domestic Journal"),
            ("patent.html", "Patent"),
        ]
        for path_suffix, expected_text in cats:
            rel_path = os.path.join("publications", path_suffix)
            html = self.read_html(rel_path)
            self.assertIn(expected_text, html, f"Category route {path_suffix} missing '{expected_text}'")

    def test_04_lectures_page_content(self):
        """TC-T1-F6: Verify Lectures page HTML structure."""
        html = self.read_html("lectures.html")
        self.assertIn("Lectures", html)

    def test_05_standardization_page_content(self):
        """TC-T1-F6: Verify Standardization page standards bodies."""
        html = self.read_html("standardization.html")
        self.assertIn("Standardization", html)
        self.assertIn("IEC TC100", html)

    def test_06_theme_css_variables(self):
        """TC-T1-F2: Verify globals.css and built assets contain theme tokens."""
        globals_path = os.path.join(BASE_DIR, "app", "globals.css")
        if not os.path.exists(globals_path):
            globals_path = os.path.join(os.getcwd(), "refer_landing_page", "app", "globals.css")
        with open(globals_path, "r", encoding="utf-8") as f:
            css = f.read()

        for token in ["--ink", "--ivory", "--paper", "--line", "--vermillion", "--cobalt"]:
            self.assertIn(token, css, f"Missing CSS variable {token} in globals.css")

    def test_07_research_projects_pageview(self):
        """TC-T1-F7: Verify Research Project PageView content in Home static SSG HTML (AC-27 / AC-31)."""
        html = self.read_html("index.html")
        
        # 1. Project PageView Title & Projects
        self.assertIn("주요 연구 프로젝트 (Research Projects)", html)
        self.assertIn("IoT Standards", html)
        self.assertIn("CCIS", html)
        self.assertIn("VLC-IoT", html)

        # 2. Key Deliverables references (Top visible items)
        self.assertIn("ISO/IEC TR 30189-1", html)
        self.assertIn("IEC 63246-1", html)
        self.assertIn("ITU-T Recommendation Y.4465", html)

        # 3. Assert zero placeholder Funder labels (AC-31)
        self.assertNotIn("Funder:", html)

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