# -*- coding: utf-8 -*-
"""把 pad.html 内置的演示数据清空后写入 APK 的 assets。

为什么要这一步：
  pad.html 里带了一套内置演示数据（12 名干部完整履历，占整页约 13%），
  作用是「浏览器直接打开也能看效果」。但打进 APK 后：
    1) 这份数据永远用不上（外壳会先用数据包覆盖），纯属冗余；
    2) 反编译 APK 就能拿到一份「看起来很像真的」干部名单，交给客户时不好解释；
    3) 双数据源容易不同步（此前改地域数据就得改两处）。
  所以：源码保留内置数据（便于浏览器预览），**打包时清空**。

用法： python3 tools/strip_demo_data.py
"""
import json
import re
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parent.parent
SRC = ROOT / "backend/src/Rmsys.Api/wwwroot/pad.html"
DST = ROOT / "android/app/src/main/assets/web/pad.html"

NAMES = ["MEETINGS", "DEPTS", "CADRES"]


def strip_array(src: str, name: str) -> tuple[str, int]:
    """把 var NAME = {...} / [...] 替换成空数组/空对象，返回 (新文本, 节省字节)"""
    m = re.search(r"var\s+" + name + r"\s*=\s*", src)
    if not m:
        return src, 0
    start_val = m.end()
    open_ch = src[start_val]
    if open_ch not in "[{":
        raise ValueError(f"{name} 的值不是数组或对象")
    close_ch = "]" if open_ch == "[" else "}"

    depth = 0
    i = start_val
    while i < len(src):
        ch = src[i]
        if ch == open_ch:
            depth += 1
        elif ch == close_ch:
            depth -= 1
            if depth == 0:
                break
        i += 1
    else:
        raise ValueError(f"{name} 括号未闭合")

    empty = "[]" if open_ch == "[" else "{}"
    new = src[:start_val] + empty + src[i + 1:]
    return new, (i + 1 - start_val) - len(empty)


def main() -> int:
    if not SRC.exists():
        print(f"源文件不存在: {SRC}")
        return 1
    src = SRC.read_text(encoding="utf-8")
    before = len(src.encode("utf-8"))

    total_saved = 0
    for name in NAMES:
        src, saved = strip_array(src, name)
        total_saved += saved
        print(f"  已清空 {name}: 节省 {saved} 字节")

    # 静态 HTML 里还有两处把演示姓名写死在标签上（不是数据，但同样是「看着像真人」）
    src = src.replace('id="dtName">张建国<', 'id="dtName">—<')
    src = src.replace('如：张建国 / 副局长', '')

    # 不再往文件里插任何说明文字：
    # 之前用 /* */ 写在 <!DOCTYPE> 之前，HTML 不认这种注释语法，
    # 结果被当成正文渲染到 PAD 首页顶部，客户一眼就能看到。

    DST.parent.mkdir(parents=True, exist_ok=True)
    DST.write_text(src, encoding="utf-8")

    after = len(src.encode("utf-8"))
    print(f"\n  源文件 {before} 字节 → 打包版 {after} 字节（净减 {before - after} 字节）")
    print(f"  已写入 {DST.relative_to(ROOT)}")

    # 自检：确认打包版里确实没有干部姓名残留
    for probe in ["张建国", "李海涛", "郑海燕"]:
        if probe in src:
            print(f"  ✖ 仍含演示姓名「{probe}」，清理失败")
            return 1

    # 自检：文件必须以 <!DOCTYPE 开头。任何前置内容（尤其是 CSS 注释）
    # 都会被浏览器当成正文渲染到页面上，客户看得见。
    if not src.lstrip().startswith("<!DOCTYPE"):
        print("  ✖ 文件开头有非 HTML 内容，会被渲染成正文")
        return 1
    print("  ✔ 自检通过：打包版不含任何演示干部姓名，且文件以 <!DOCTYPE 开头")
    return 0


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