#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""复盘报告 HTML 生成器 —— am 版（2026-10-19 用户要求：所有 HTML 一律走 am）

用法（与原 build_html.py 完全一致，下游脚本无需改动）：
    python3 build_html.py YYYYMMDD

行为：
  1. 读 /root/.hermes/skills/qianxiaodou-engine/data/reports/report_YYYYMMDD.md
  2. 经 am_bridge 转 am 草稿（密集段落自动转 callout/limits/kv）
  3. 调 am render 输出 /root/web_reports/report_YYYYMMDD.html
  4. 保留表格行守恒校验（rows_lost），保证内容不丢

回退：cp /root/backups/am_migration_20261019/build_html.py .
"""
import pathlib
import re
import sys

sys.path.insert(0, "/root/web_reports")
import am_bridge

ENGINE = pathlib.Path("/root/.hermes/skills/qianxiaodou-engine")
SRC_DIR = ENGINE / "data" / "reports"
OUT_DIR = pathlib.Path("/root/web_reports")


def _md_row_keys(md):
    """提取所有表格行首格，用于守恒校验。"""
    keys, title = [], ""
    for line in md.splitlines():
        s = line.strip()
        if s.startswith("#"):
            title = s
            continue
        if not s or s.startswith(">") or re.match(r"^\|[\s:|-]+\|?$", s):
            continue
        if "|" not in s or re.match(r"^([-*+]\s|\d+\.\s)", s):
            continue
        cells = [c.strip() for c in s.strip("|").split("|") if c.strip()]
        if len(cells) < 2:
            continue
        k = re.sub(r"[*`]", "", cells[0])
        if len(k) >= 2:
            keys.append(k)
    return keys


def build(date):
    src = SRC_DIR / f"report_{date}.md"
    if not src.exists():
        print(f"ERROR: 报告不存在 {src}", file=sys.stderr)
        return 1
    md = src.read_text(encoding="utf-8")

    # 从 md 提取标题/状态行
    title = f"{date[:4]}.{date[4:6]}.{date[6:]} 收盘复盘"
    m = re.search(r"^#\s+(.+)$", md, re.M)
    if m:
        title = re.sub(r"\s*市场复盘\s*$", "", m.group(1).strip()) or title

    out = OUT_DIR / f"report_{date}.html"
    ok, stdout, stderr = am_bridge.convert(
        str(src), str(out),
        title=title,
        subtitle="钱小兜引擎 · 每日复盘",
        template="doc",
        theme="paper",
        source=f"数据日 {date[:4]}-{date[4:6]}-{date[6:]}",
    )
    print((stdout or stderr).strip())
    if not ok:
        return 1

    # 守恒校验
    html = out.read_text(encoding="utf-8")
    plain = re.sub(r"<[^>]+>", "", html)
    missing = [k for k in dict.fromkeys(_md_row_keys(md)) if k not in plain]
    if missing:
        print(f"[WARN] 表格行丢失 {len(missing)} 行: {missing[:6]}", file=sys.stderr)
    print(f"OK: {out} ({out.stat().st_size} bytes) · rows_lost={len(missing)}")
    return 0


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("用法: python3 build_html.py YYYYMMDD", file=sys.stderr)
        sys.exit(2)
    sys.exit(build(sys.argv[1]))
