#!/usr/bin/env python3
"""檢查本機 HTML 初稿常見缺漏：語言、標題、替代文字與佔位文案。"""

from __future__ import annotations

import argparse
import re
import sys
from html.parser import HTMLParser
from pathlib import Path


class PageParser(HTMLParser):
    def __init__(self) -> None:
        super().__init__()
        self.title = ""
        self._in_title = False
        self.lang_on_html = False
        self.images_missing_alt = 0
        self.placeholders = 0
        self.text_bits: list[str] = []

    def handle_starttag(self, tag, attrs):
        attr = dict(attrs)
        if tag == "html" and attr.get("lang"):
            self.lang_on_html = True
        if tag == "title":
            self._in_title = True
        if tag == "img" and not (attr.get("alt") or "").strip():
            self.images_missing_alt += 1

    def handle_endtag(self, tag):
        if tag == "title":
            self._in_title = False

    def handle_data(self, data):
        if self._in_title:
            self.title += data
        self.text_bits.append(data)


def inspect(path: Path) -> list[str]:
    raw = path.read_text(encoding="utf-8")
    parser = PageParser()
    parser.feed(raw)
    issues: list[str] = []
    if not parser.lang_on_html:
        issues.append("html 缺少 lang，繁中頁面建議設為 zh-Hant-TW")
    if not parser.title.strip():
        issues.append("title 是空的")
    if parser.images_missing_alt:
        issues.append(f"{parser.images_missing_alt} 張圖片缺少 alt")
    blob = " ".join(parser.text_bits)
    if re.search(r"lorem ipsum", blob, re.I):
        issues.append("內文仍有 Lorem ipsum 佔位")
    return issues


def main() -> int:
    parser = argparse.ArgumentParser(description="檢查網站初稿")
    parser.add_argument("root", type=Path)
    args = parser.parse_args()
    pages = sorted(args.root.rglob("*.html"))
    if not pages:
        print("找不到 HTML 檔。", file=sys.stderr)
        return 1
    total = 0
    for page in pages:
        issues = inspect(page)
        rel = page.relative_to(args.root)
        if issues:
            total += len(issues)
            print(f"{rel}:")
            for item in issues:
                print(f"  - {item}")
        else:
            print(f"{rel}: 沒有偵測到這份清單裡的問題")
    print(f"共 {total} 項待修。")
    return 1 if total else 0


if __name__ == "__main__":
    sys.exit(main())
