#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""把「检索问答」Tab 注入蛋白结构与性能工作台 v2 → v3。
输入：~/.hermes/profiles/zone-b/cache/documents/doc_c5e227b8fafd_蛋白结构与性能工作台_v2_改造位点.html
输出：工具/蛋白结构与性能工作台_v3_检索问答_20261031_V01.html
"""
import json, pathlib, re, sys

ROOT = pathlib.Path('/Users/liuxinyuan/Desktop/Hermes输出-工作类')
SRC = pathlib.Path('/Users/liuxinyuan/.hermes/profiles/zone-b/cache/documents/doc_c5e227b8fafd_蛋白结构与性能工作台_v2_改造位点.html')
PANEL = ROOT / '资料/protein_qa_panel.html'
JS = ROOT / '资料/protein_qa.js'
CAT = ROOT / '数据/protein_qa_catalog_20261031.json'
OUT = ROOT / '工具/蛋白结构与性能工作台_v3_检索问答_20261031_V01.html'

html = SRC.read_text(encoding='utf-8')
panel = PANEL.read_text(encoding='utf-8')
js = JS.read_text(encoding='utf-8')
cat = json.loads(CAT.read_text(encoding='utf-8'))

# JSON 内联，防止 </script> 截断
cat_json = json.dumps(cat, ensure_ascii=False, separators=(',', ':')).replace('</', '<\\/')
js = js.replace('__QA_CATALOG__', cat_json)

# 1) 标题 + 品牌 tag
html = html.replace('<title>蛋白结构与性能关联工作台</title>',
                    '<title>蛋白结构与性能关联工作台 · 检索问答</title>')
html = html.replace('蛋白结构与性能 · 4 酶', '蛋白结构与性能 · 4 酶 + 检索问答')

# 2) 面板插在第一个蛋白面板之前（仍在 .wrap 内）
marker = '<div class="panel on" id="p-Taq">'
assert html.count(marker) == 1, '找不到唯一的 p-Taq 面板插入点'
html = html.replace(marker, panel + '\n' + marker, 1)

# 3) JS 插在 </body> 前（现有脚本之后）
assert html.count('</body>') == 1
html = html.replace('</body>', '<script>\n' + js + '\n</script>\n</body>', 1)

# 4) 简单自检
assert html.count('id="p-QA"') == 1
assert html.count('id="qaTabBtn"') == 1
assert '__QA_CATALOG__' not in html
assert html.count('<script>') >= 2

OUT.write_text(html, encoding='utf-8')
print('WROTE', OUT)
print('size MB', round(OUT.stat().st_size / 1024 / 1024, 3))
print('panel chars', len(panel), 'js chars', len(js), 'catalog families', len(cat['families']))
