#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成《宝锐销售助手 · 使用手册》自包含 HTML（品牌套件 + 零外链）。

口径要求（用户 2026-10-12）：
  · 面向使用助手的销售本人，纯使用说明
  · 不出现任何内部机制/路径/账号/他人信息，也不出现"已过滤/已脱敏"这类背景说明
"""
import os
import sys
from datetime import datetime

sys.path.insert(0, os.path.expanduser('~/Desktop/Hermes输出-工作类/脚本'))
import brand_kit as BK  # noqa: E402

OUT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类/团队共享/宝锐销售助手_使用手册.html'
NOW = datetime.now().strftime('%Y-%m-%d')

SCENES = [
    ('① 拜访前准备', '下周要去苏州天隆，帮我准备一下：他们最近在做什么、谁在负责、我去该聊什么',
     '研究方向、关键人、近期跟进、在测产品、可以带的话术与方案，一次给全'),
    ('② 客户采购与走势', '苏州天隆今年买了多少？跟去年同期比呢？主要买哪些货',
     '年度/月度金额、同比、主销货号，含订单明细'),
    ('③ 产品与选型', '客户要做多重 PCR，引物探针体系推荐哪个货号？有没有更耐受的版本',
     '按客户体系给货号建议，说明适配理由与备选'),
    ('④ 技术问题', '这个体系能不能耐受 60℃ 预变性？会不会影响灵敏度',
     '给判断 + 依据 + 建议的验证实验，结论附出处'),
    ('⑤ 客诉与特殊要求', '这家客户有没有提过特殊包装或运输要求？之前有没有过客诉',
     '客诉记录、特殊要求（包装/标签/交付/质检/账期），避免踩重复的坑'),
    ('⑥ 竞品对比', '我们的 RT 酶跟竞品比，耐热性差在哪？客户为什么选对方',
     '参数与实测证据对比，可用于客户现场答疑'),
    ('⑦ 市场与行业', '分子诊断原料今年是什么行情？客户那边主要卡在哪',
     '行业动态、政策与价格趋势，基于公开信息'),
    ('⑧ 文献与证据', '找几篇冻干保护剂相关的文献，要能支撑我给客户的方案',
     '文献检索 + 要点提炼，给出处'),
    ('⑨ 整理与撰写', '把这次沟通整理成一份拜访纪要，重点写测试进展和下一步',
     '纪要/方案/邮件草稿等内容起草，你再审改'),
]

QUICK = [
    ('带上客户名', '「苏州天隆…」比「那个客户…」准确得多，也不会问错对象'),
    ('说清时间范围', '「今年」「三季度」「近三个月」，避免它给到你不需要的区间'),
    ('说明用途', '「给客户看的方案」和「内部判断」要的详略不一样，说一句就能对上'),
    ('一次一件事', '问题拆开发，比一口气问五件事更准，也方便你逐条确认'),
]

FAQ = [
    ('它会不会编数字？', '它只引用系统里的真实记录。查不到会直接说查不到，不会猜——这也是它偶尔说"没有数据"的原因。'),
    ('数据跟实际不一致怎么办？', '以系统记录为准；发现对不上，告诉刘新元，会核对更新。'),
    ('我在外面出差能用吗？', '能，微信里随时可用，不需要装任何软件。'),
    ('能帮我直接发给客户吗？', '不能。它只做分析和材料准备，对外发送请你自己确认后走正常渠道。'),
    ('它能帮我改系统里的价格、订单、客户归属吗？', '不能。这些由系统和管理端维护，助手只做查询与分析。'),
    ('它说"不在你的范围内"是什么意思？', '助手只服务你负责的客户。要查其他客户，找刘新元开通。'),
]


def scene_card(t, q, a):
    return ('<div class="scene"><div class="st">%s</div>'
            '<div class="sq"><span class="lbl">你可以这样说</span><div class="q">%s</div></div>'
            '<div class="sa"><span class="lbl">它会给到</span><div class="a">%s</div></div></div>'
            % (t, q, a))


def main():
    html = """<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8">
<title>宝锐销售助手 · 使用手册</title>
<style>
:root{--blue:#0b5fa5;--blue2:#1e88e5;--ink:#16202b;--muted:#5b6b7c;--line:#e3ebf3;--bg:#f6f9fc}
*{box-sizing:border-box}
body{margin:0;font:15px/1.75 -apple-system,"PingFang SC","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--bg)}
main{max-width:980px;margin:0 auto;padding:28px 22px 8px}
h1{font-size:27px;margin:6px 0 6px;letter-spacing:.5px}
h2{font-size:19px;margin:30px 0 12px;padding-left:11px;border-left:4px solid var(--blue)}
.lead{color:var(--muted);font-size:15px;margin-bottom:18px}
.hero{background:linear-gradient(135deg,#0b5fa5,#1e88e5);color:#fff;border-radius:14px;padding:22px 24px;margin:14px 0 8px}
.hero h1{color:#fff;margin:0 0 8px}
.hero p{margin:0;opacity:.94}
.grid{display:grid;grid-template-columns:1fr;gap:12px}
.scene{background:#fff;border:1px solid var(--line);border-radius:12px;padding:15px 17px;box-shadow:0 1px 2px rgba(11,95,165,.04)}
.st{font-weight:700;color:var(--blue);font-size:16px;margin-bottom:9px}
.sq,.sa{display:flex;gap:10px;align-items:flex-start}
.sa{margin-top:7px}
.lbl{flex:0 0 78px;font-size:12px;color:#fff;background:var(--blue2);border-radius:6px;text-align:center;padding:3px 0;margin-top:3px}
.sa .lbl{background:#7aa9d0}
.q{font-weight:600}
.a{color:var(--muted)}
.quick{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.qi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.qi b{color:var(--blue)}
.qa{background:#fff;border:1px solid var(--line);border-radius:12px;padding:4px 18px 14px;margin-top:6px}
.qa dt{font-weight:700;margin:14px 0 4px;color:var(--ink)}
.qa dd{margin:0;color:var(--muted)}
.note{background:#fff8e6;border:1px solid #f2dfae;border-radius:12px;padding:14px 18px;margin-top:14px}
.note ul{margin:6px 0 0;padding-left:20px}
.note li{margin:5px 0}
.flow{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}
.step{flex:1 1 200px;background:#fff;border:1px dashed #b9d2e8;border-radius:12px;padding:12px 14px}
.step b{display:block;color:var(--blue);margin-bottom:4px}
@media(max-width:720px){.quick{grid-template-columns:1fr}}
</style></head><body><main>
<div class="hero"><h1>宝锐销售助手 · 使用手册</h1>
<p>微信里直接说话，就能做访前准备、客户分析、产品技术解答、竞品与市场调研、文献检索。</p></div>
<div class="lead">不需要安装任何软件，也不用记命令 —— 像跟同事讲话一样把需求说清楚即可。</div>

<h2>三句话上手</h2>
<div class="flow">
  <div class="step"><b>1 · 打开微信</b>找到助手对话，直接发消息</div>
  <div class="step"><b>2 · 说清楚</b>客户名 + 你要什么（见下方示例）</div>
  <div class="step"><b>3 · 追问</b>结果不满意就接着说"再展开讲讲第 3 点"</div>
</div>

<h2>它能帮你做什么</h2>
<div class="grid">
""" + '\n'.join(scene_card(*s) for s in SCENES) + """
</div>

<h2>怎么问，效果最好</h2>
<div class="quick">
""" + '\n'.join('<div class="qi"><b>%s</b><div class="a">%s</div></div>' % q for q in QUICK) + """
</div>

<h2>关于数据范围</h2>
<div class="note">
<ul>
  <li>助手服务的是<strong>你负责的客户</strong>：订单、跟进记录、客诉、成交价、特殊要求都能查、能分析。</li>
  <li>如果问的是其他客户的资料，它会告诉你不在你的范围内 —— 这属于公司数据权限的正常要求，需要开通请找刘新元。</li>
  <li>数据以系统记录为准。发现与实际对不上，告诉刘新元，会核对更新。</li>
</ul>
</div>

<h2>使用注意</h2>
<div class="note">
<ul>
  <li>涉及客户的资料请按公司保密要求使用，不要转发到公司以外。</li>
  <li>技术类结论会附出处；用于对外正式材料前，请按流程再过一遍评审。</li>
  <li>它不代替你做决定，也不替你改系统里的数据 —— 价格、订单、客户归属都由系统和管理端维护。</li>
  <li>需要开通权限、或数据有出入，找刘新元。</li>
</ul>
</div>

<h2>常见问题</h2>
<dl class="qa">
""" + '\n'.join('<dt>%s</dt><dd>%s</dd>' % f for f in FAQ) + """
</dl>
</main></body></html>"""

    html = BK.inject(html, theme='light', tag='营销中心 · 销售助手',
                     footer_extra='使用手册 · ' + NOW)
    # 抹掉品牌套件自带的内部注释（含脚本路径），对使用者无需可见
    import re as _re
    html = _re.sub(r'/\*\s*=+\s*bior-brand-v1.*?\*/', '/* bior-brand-v1 · 宝锐品牌样式 */', html, flags=_re.S)
    v = BK.verify(html)
    print('品牌自检:', v)
    assert all(v.values()), v
    # 敏感/内部信息扫描（不得出现）
    banned = ['代码:', '.hermes', 'profiles', 'SOUL', 'user_id', 'o9cq80', 'customer_attribution',
              '数据包', 'baorui-sales', 'API', 'api_key', 'sk-', '/Users/', '.json', '.py',
              '赵云浩', '黄文才', '陈溪子', '超管', 'allowlist', '白名单', '脱敏', '已过滤', '隔离机制',
              'ERP', 'token']
    hits = [b for b in banned if b in html]
    for b in hits:
        i = html.find(b)
        print('  命中 %-12s 上下文: ...%s...' % (b, html[max(0, i-70):i+40].replace(chr(10), ' ')))
    print('敏感/内部信息扫描:', hits or '无 ✅')
    assert not hits, hits
    os.makedirs(os.path.dirname(OUT), exist_ok=True)
    open(OUT, 'w', encoding='utf-8').write(html)
    print('→ %s（%.1f KB）' % (OUT, os.path.getsize(OUT) / 1024.0))


if __name__ == '__main__':
    main()
