#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""把荧光素酶资料改成宝锐对外技术资料格式。

输入：用户发来的 荧光素酶资料-20261101.html
输出：对外物料/荧光素酶_产品资料_20261101_V01.html

处理：
1) 清理内部样品编号/内部前缀/内部演示字样；
2) 对外统一产品名与货号：Luciferase / E800系列；
3) 竞品匿名化为对照样品 N；
4) 品牌页眉（真 Logo + BIORI BIOTECH + 宝锐生物 + slogan）与品牌页脚；
5) 保留原产品页交互、图表、离线单文件能力；
6) 跑品牌 8 项自检 + 对外禁用串扫描。
"""
import os
import re
import sys

ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
SRC = '/Users/liuxinyuan/.hermes/profiles/zone-b/cache/documents/native-inputs/880c76b43b7adbdedfd2fe0914189c2772a01fb852513dcde78f1a18e9c4b9b7/doc_479079190dc9_荧光素酶资料-20261101.html'
OUT_DIR = os.path.join(ROOT, '对外物料')
OUT = os.path.join(OUT_DIR, '荧光素酶_产品资料_20261101_V01.html')

sys.path.insert(0, os.path.join(ROOT, '脚本'))
import brand_kit as BK

html = open(SRC, encoding='utf-8').read()
changes = {}


def lock_counters(html):
    """把数字动画锁定为静态目标值，外部资料/截图/打印不出现半截数字。"""
    pat = re.compile(r'(<(?P<tag>[a-zA-Z0-9]+)(?P<attrs>[^>]*?)data-count="(?P<v>[^"]+)"(?P<tail>[^>]*)>)(?P<content>.*?)(</(?P=tag)>)', re.S)
    def one(m):
        try:
            v = float(m.group('v'))
        except Exception:
            return m.group(0)
        dm = re.search(r'data-dec="(\d+)"', m.group('attrs') + m.group('tail'))
        dec = int(dm.group(1)) if dm else 0
        txt = ('%.*f' % (dec, v)) if dec else ('{:,}'.format(int(round(v))))
        attrs = (m.group('attrs') + ' data-target-count="' + m.group('v') + '"' + m.group('tail'))
        return '<' + m.group('tag') + attrs + '>' + txt + '</' + m.group('tag') + '>'
    return pat.sub(one, html)


def rep(old, new, name=None, count=0):
    global html
    n = html.count(old)
    if n:
        html = html.replace(old, new) if count == 0 else html.replace(old, new, count)
        changes[name or old] = changes.get(name or old, 0) + n

# 1. 内部编号/旧命名
rep('BR-Luciferase（对比样品编号 020714）', 'Luciferase', '移除内部样品编号')
rep('BR-Luciferase', 'Luciferase', '移除 BR 前缀')
rep('020714', '', '移除 020714')
rep('E800-X系列', 'E800系列', '货号 E800-X→E800')
rep('E800-X', 'E800', '货号兜底')
rep('对比对象：Supplier N 为市场同类产品，Luciferase 为宝锐 Luciferase。',
    '对比对象：对照样品 N 为市场同类产品；宝锐 Luciferase 为本产品。', '对比对象表述')

# 2. 竞品匿名化 & 对外措辞
rep('Supplier N', '对照样品 N', '竞品匿名')
rep('竞品', '对照样品', '竞品→对照样品')
rep('活力保留率领先对照样品', '活力保留率高于对照样品', '领先→高于')
rep('衰减速度约为对照样品的', '衰减速度约为对照样品的', '保留衰减表述')
rep('宣传口径「约 3 倍」', '同酶量实测信号比', '移除宣传口径')
rep('本演示中', '本资料中', '演示→本资料')
rep('单文件 · 可离线演示', '技术资料 · 可离线查阅', '移除演示标签')
rep('单文件离线演示', '技术资料', '移除单文件标签')
rep('内部加速稳定性实测', '宝锐加速稳定性实验', '内部数据源→宝锐实验')
rep('数据源：内部', '数据来源：宝锐', '数据源兜底')
rep('内部', '宝锐', '内部字样兜底')

# 3. 原页面自建 brand 区块与外层 footer 改造，避免和品牌套件双头双尾
html = re.sub(r'<div class="brand">.*?</div>', '<div class="brand">Luciferase 技术资料</div>', html, count=1, flags=re.S)
html = html.replace('<div class="nav-badge">技术资料 · 可离线查阅</div>',
                    '<div class="nav-badge">技术资料 · 2026-11</div>')
html = html.replace('<footer>', '<div class="product-foot">', 1)
html = html.replace('</footer>', '</div>', 1)
html = html.replace('/* ============ FOOTER ============ */\nfooter{',
                    '/* ============ PRODUCT FOOTER ============ */\n.product-foot{', 1)

# 4. 对外资料不依赖滚动显隐：首屏/打印都直接可见，避免截图或 PDF 出现整块空白
html = html.replace('.reveal{opacity:0;transform:translateY(16px)}',
                    '.reveal{opacity:1;transform:none}')
html = html.replace('<title>宝锐 Luciferase 荧光素酶 · 产品演示</title>',
                    '<title>宝锐 Luciferase 荧光素酶 · 产品技术资料</title>')

# 4. 页脚补一条对外口径说明（事实，不写建议/结论）
html = html.replace('<span class="chip">数据来源：宝锐加速稳定性实验</span>',
                    '<span class="chip">数据来源：宝锐加速稳定性实验</span><span class="chip">参数以随货说明书 / 质检报告为准</span>')

# 5. 移动端品牌页眉防溢出（brand_kit CSS 后注入，选择器加权）
mobile = '''
@media (max-width:760px){
  .bior-header .bior-header-inner{flex-wrap:wrap;padding:8px 12px;gap:8px}
  .bior-header .bior-name{font-size:13px;letter-spacing:.3px}
  .bior-header .bior-cn{font-size:10px}
  .bior-header .bior-slogan{font-size:10px;letter-spacing:0}
  .bior-header .bior-logo-chip img{height:22px}
  .bior-header .bior-tagwrap{flex:1 1 100%!important;margin-left:0!important;text-align:left!important;line-height:1.5!important}
  .bior-header .bior-tag,.bior-header .bior-slogan{display:inline-block!important;margin-right:10px}
  .chart-grid{grid-template-columns:minmax(0,1fr)!important}
  .chart-card{min-width:0!important;width:100%!important}
  .chart-box{min-width:0!important;width:100%!important;height:280px!important}
  .chart-box canvas{max-width:100%!important}
  .legend{min-width:0!important}
  .ctrl{overflow:hidden}
  .ctrl-g{flex-wrap:wrap}
  h1 .en{white-space:normal!important;overflow-wrap:anywhere}
}
'''
html = html.replace('</style>', mobile + '</style>', 1)

# 6. 品牌页眉/页脚
html = lock_counters(html)
html = BK.inject(html, theme='dark', tag='生命科学 · 产品技术资料',
                 footer_extra='技术资料 · 2026-11-01 · 参数以随货说明书 / 质检报告为准')

assert all(BK.verify(html).values()), BK.verify(html)

os.makedirs(OUT_DIR, exist_ok=True)
open(OUT, 'w', encoding='utf-8').write(html)

# 7. 对外禁用串扫描
forbidden = ['BR-Luciferase', '020714', 'E800-X', '单文件', '内部加速', '宣传口径',
             '一句话', '必做', '建议', '结论', '为什么选', '主推', '第一梯队', '最优',
             '优于', '.py', '/Users/', '.hermes', 'profiles']
hits = [x for x in forbidden if x in html]
print('OUT', OUT, os.path.getsize(OUT))
print('CHANGES', changes)
print('BRAND', BK.verify(html))
print('FORBIDDEN_HITS', hits)
print('HEADER_COUNT', html.count('class="bior-header'), 'FOOTER_COUNT', html.count('class="bior-footer'))
print('SLOGAN_COUNT', html.count('守护生命健康，缔造美好生活'))
