#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""构建生产版「活动录入.html」：V2 渠道+场景，写服务端，商机走审批队列。"""
import pathlib, re, shutil, subprocess

ROOT = pathlib.Path('/Users/liuxinyuan/Desktop/Hermes输出-工作类')
V5 = ROOT / '工具/蛋白结构与性能工作台_v5_交互重做_20261031_V01.html'
TPL = ROOT / '资料/activity_v2_demo_template.html'
CSS = ROOT / '资料/activity_v2_demo.css'
JS = ROOT / '资料/activity_v2_demo.js'
OUT = ROOT / '工具/活动录入.html'
BACKUP = ROOT / '工具/活动录入_v1_旧模板_20261031.html'
CHECK = pathlib.Path('/Users/liuxinyuan/.hermes/profiles/zone-b/cache/scratch/activity_v2_prod_check.js')

v5 = V5.read_text(encoding='utf-8')
tpl = TPL.read_text(encoding='utf-8')
css = CSS.read_text(encoding='utf-8')
js = JS.read_text(encoding='utf-8')

m = re.search(r'/\* ===== bior-brand-v1.*?(?=</style>)', v5, re.S)
brand_css = m.group(0) if m else ''
start = v5.index('<div class="bior-header"')
end = v5.index('<div class="wrap">', start)
header = v5[start:end]
header = header.replace('蛋白结构与性能 · 4 酶 + 检索问答 + 突变', '销售活动录入')
header = header.replace('蛋白结构与性能工作台', '销售活动录入')

html = (tpl.replace('{{BRAND_CSS}}', brand_css)
           .replace('{{PAGE_CSS}}', css)
           .replace('{{HEADER}}', header)
           .replace('{{JS}}', js))
for token in ['{{BRAND_CSS}}', '{{PAGE_CSS}}', '{{HEADER}}', '{{JS}}']:
    assert token not in html, token

# 生产标记
html = html.replace('window.FEISHU_AUTO_ENABLED = false;',
                    'window.FEISHU_AUTO_ENABLED = false; window.ACT_V2_PROD = true;')
# 演示文案 → 生产文案
html = html.replace('销售活动录入 · 新模板 Demo · V01', '销售活动录入')
html = html.replace('销售活动录入 · 新模板 Demo', '销售活动录入')
html = html.replace('销售活动录入 <span style="font-size:11px;color:#7c8797;font-weight:500">新模板 Demo</span>', '销售活动录入')
html = html.replace('按 2026-10-31 新模板改造：活动类型（渠道）+ 活动内容（场景）两层；新商机需主管审核；提交只写浏览器 localStorage，不写生产、不发飞书。',
                    '活动类型（渠道）+ 活动内容（场景）两层；新商机提交后进入主管审核队列，审核通过才进入正式商机池。')
html = html.replace('演示角色可切换 →', '')
html = html.replace('<b>DEMO</b>', '<b>V2</b>')
html = html.replace('本页为演示：所有新建商机都会出现在这里；生产环境按通知与权限过滤。',
                    '仅展示你有权查看的新建商机；刘新元/管理员可查看全部并行使一票否决。')
html = html.replace('内部演示 · 不写生产 ｜ 新模板 V01 · 2026-10-31', '生产版 V2 · 2026-10-31')
html = html.replace('本页为演示', '本页')
html = html.replace('演示：', '')

if not BACKUP.exists():
    shutil.copy2(OUT, BACKUP)
OUT.write_text(html, encoding='utf-8')

CHECK.write_text(js, encoding='utf-8')
r = subprocess.run(['node', '--check', str(CHECK)], capture_output=True, text=True)
print('WROTE', OUT, 'bytes', OUT.stat().st_size)
print('BACKUP', BACKUP, BACKUP.stat().st_size if BACKUP.exists() else 0)
print('node', r.returncode, r.stderr[-800:])
print('brand_css', len(brand_css), 'header', len(header))
print('external script', len(re.findall(r'<script[^>]+src=', html, re.I)))
print('external link', len(re.findall(r'<link[^>]+href=', html, re.I)))
print('demo flag left', html.count('DEMO'), html.count('演示'))
