# -*- coding: utf-8 -*-
"""把「含页眉页脚版」整书文本转成带格式 Markdown。
用法: .venv/bin/python test/to_markdown.py <书目录> [源txt文件名关键字]
"""
import glob
import os
import re
import sys

BOOK_DIR = (sys.argv[1] if len(sys.argv) > 1 else
            "/home/zyw/Downloads/dl-hub/23-拍照OCR取字/data/books/第1章_软件项目管理概述_华为鸿蒙OS开发项目管理实践案例")
KEY = sys.argv[2] if len(sys.argv) > 2 else "含页眉页脚"


def main():
    files = sorted(glob.glob(BOOK_DIR + "/全书文本_*.txt"), reverse=True)
    src = None
    for f in files:
        if KEY in os.path.basename(f) or "【页眉】" in open(f, encoding="utf-8").read():
            src = f
            break
    if not src:
        raise SystemExit("找不到含页眉页脚版的源文件: %s" % BOOK_DIR)
    raw = open(src, encoding="utf-8").read()
    title_raw = os.path.basename(BOOK_DIR).replace("_", " ").strip()

    out = []
    out.append("# " + title_raw)
    out.append("")
    out.append("> 📄 **版本**：含页眉页脚（页眉/页脚以引用样式标注，正文自动重排）　·　"
               "**整理**：拍书取字（DeepSeek VL 结构化识别，按印刷页码自动排序）")
    mc = re.search(r"生成时间：([^\n]+)　共 (\d+) 页　(\d+) 字", raw)
    if mc:
        out.append(f"> 🗓 生成时间：{mc.group(1)}　·　共 **{mc.group(2)} 页**　·　**{mc.group(3)} 字**")
    out.append("")
    out.append("---")
    out.append("")

    # 切页
    blocks = []
    for line in raw.split("\n"):
        ls = line.strip()
        m = re.match(r"^────────── (.+?) ──────────$", ls)
        if m:
            blocks.append(("PAGE", m.group(1)))
        elif ls.startswith("【页眉】"):
            blocks.append(("HEAD", ls[4:].strip()))
        elif ls.startswith("【页脚】"):
            blocks.append(("FOOT", ls[4:].strip()))
        elif ls:
            blocks.append(("TXT", ls))
        else:
            blocks.append(("BR", ""))

    pages = []
    cur = []
    started = False
    for b in blocks:
        if b[0] == "PAGE":
            if cur:
                pages.append(cur)
            cur = [b]
            started = True
        elif started:
            cur.append(b)
    if cur:
        pages.append(cur)

    def para(par_lines):
        if not par_lines:
            return ""
        txt = "\n".join(par_lines).strip()
        return txt + "\n\n" if txt else ""

    md_parts = []
    for pg in pages:
        ptitle = next(v for k, v in pg if k == "PAGE")
        md_parts.append("## " + ptitle.replace("（", "（").replace("）", "）") + "\n")
        par = []

        def flush():
            nonlocal local_par
            md_parts.append(para(local_par))
            local_par = []

        local_par = par
        for kind, val in pg[1:]:
            if kind == "HEAD":
                flush()
                md_parts.append(f"> 🏷 **页眉**：{val}\n")
            elif kind == "FOOT":
                flush()
                md_parts.append(f"> 🔖 **页脚**：{val}\n")
            elif kind == "TXT":
                local_par.append(val)
            elif kind == "BR":
                flush()
        flush()
        md_parts.append("\n---\n\n")

    md = "\n".join(out) + "".join(md_parts).rstrip() + "\n"
    out_file = BOOK_DIR + "/" + os.path.basename(BOOK_DIR) + "_含页眉页脚.md"
    open(out_file, "w", encoding="utf-8").write(md)
    print("已生成:", out_file)
    print("行数:", md.count("\n") + 1, "字节:", len(md.encode("utf-8")))


if __name__ == "__main__":
    main()
