#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""把中奖口径改为「含数字 8 或 8 的倍数，都中」（用户 2026-10-08 确认），并更新中奖率说明。"""
import io
import sys

ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
NOTICE = ROOT + '/脚本/gen_like_campaign_notice.py'
LEDGER = ROOT + '/脚本/gen_like_campaign_ledger.py'

OLD_SEQ = """    if n % 8 == 0 or str(n).endswith('8'):"""
NEW_SEQ = """    if n % 8 == 0 or '8' in str(n):"""

P = []
# ── 内部通知 ──
P.append((NOTICE, OLD_SEQ, NEW_SEQ))
P.append((NOTICE,
"""<div class="dan" style="margin-bottom:10px"><b>⚠️ 口径必须先统一（见文末待确认项）：</b>文案写「含数字 8」，但枚举出的序号<b>跳过了 81–89</b>。
实际列表 = <b>「8 的倍数 或 个位是 8」</b>。对外统一说<b>「个位逢 8」</b>最不容易起争议 —— 若客户拿 81–89 来问，按本表口径解释。</div>""",
"""<div class="dan" style="margin-bottom:10px"><b>口径已确认（2026-10-08）：</b>点赞序号<b>「含数字 8」或「8 的倍数」满足其一即中奖</b> ——
即 81–89 这一整段（81/82/83/84/85/86/87/88/89）<b>都算中奖</b>，下方序号表已按此口径重列。
<span style="color:#922B21"><b>注意：中奖率由约 20% 升到约 28%</b>，礼品份数预算需相应上调。</span></div>"""))
P.append((NOTICE,
"""<div class="tip">中奖率约 20%（每 5 位点赞者约 1 位中奖）。""",
"""<div class="tip">中奖率约 <b>28%</b>（每 3–4 位点赞者约 1 位中奖）。"""))
P.append((NOTICE,
"""<div class="warn" style="margin-bottom:10px"><b>① 中奖序号口径：</b>文案写「含数字 8」，但列出的序号跳过 81–89。
按「含 8」→ 81–89 共 9 个都该中；按实际枚举（8 的倍数 ∪ 个位是 8）→ 不含。
<b>建议对外统一表述为「个位逢 8」</b>，本通知与登记表均按此口径。<span class="tip">（如需改成「含 8」，我更新序号表与中奖率说明）</span></div>""",
"""<div class="warn" style="margin-bottom:10px"><b>① 中奖序号口径 —— 已确认（2026-10-08）：</b>
按「<b>含数字 8 或 8 的倍数，都中</b>」执行，序号表与登记表均已更新。
<span style="color:#922B21"><b>中奖率由约 20% → 约 28%</b>（100 位点赞者中约 27–28 位中奖），
礼品份数按此上浮约 40%，请据此核预算。</span></div>"""))
P.append((NOTICE,
"""<div class="sec"><h2><span class="n">08</span>待确认项（请回复确认后我再定稿对外物料）</h2>""",
"""<div class="sec"><h2><span class="n">08</span>口径确认记录</h2>"""))
P.append((NOTICE,
"""<div class="warn" style="margin-bottom:0"><b>② 子活动②的周次标注：</b>""",
"""<div class="warn" style="margin-bottom:0"><b>② 待确认 —— 子活动②的周次标注：</b>"""))
P.append((NOTICE,
"""① 本通知为<b>内部执行版</b>""",
"""① 中奖口径 = 「含数字 8 或 8 的倍数」（2026-10-08 确认，中奖率约 28%）；<br>
② 本通知为<b>内部执行版</b>"""))
# ── 登记表 ──
P.append((LEDGER, OLD_SEQ, NEW_SEQ))
P.append((LEDGER,
"""    ('中奖规则', '客户点赞，点赞序号为「8 的倍数 或 个位是 8」即中奖；奖品二选一（券 / 等值伴手礼）'),
    ('中奖率', '约 20%（每 5 位点赞者约 1 位中奖）'),
    ('', ''),
    ('⚠️ 口径待确认', '文案写「含数字 8」，但列出的序号跳过了 81–89。按「含 8」这 9 个都该中；'),
    ('', '按实际枚举（8的倍数 ∪ 个位是8）则不含。建议对外统一表述为「个位是 8」，避免开奖争议。'),""",
"""    ('中奖规则', '客户点赞，点赞序号「含数字 8」或「8 的倍数」满足其一即中奖；奖品二选一（券 / 等值伴手礼）'),
    ('中奖率', '约 28%（每 3–4 位点赞者约 1 位中奖）'),
    ('', ''),
    ('口径已确认', '2026-10-08 确认：按「含 8 或 8 的倍数，都中」执行 —— 81–89 整段都算中奖。'),
    ('预算提示', '中奖率由约 20% 升至约 28%，礼品份数预算需上浮约 40%。'),"""))
P.append((LEDGER,
"""    dv3.prompt = '该序号是否为中奖序号？（8的倍数 或 个位是8）'""",
"""    dv3.prompt = '该序号是否为中奖序号？（含数字 8 或 8 的倍数）'"""))

ok = True
touched = set()
for f, a, b in P:
    s = io.open(f, encoding='utf-8').read()
    n = s.count(a)
    tag = '✅' if n == 1 else '❌'
    print('  %s %-34s 命中 %d' % (tag, f.split('/')[-1], n))
    if n != 1:
        ok = False
    else:
        io.open(f, 'w', encoding='utf-8').write(s.replace(a, b, 1))
        touched.add(f)
print('\n%s' % ('两个生成器已更新 ✅' if ok else '有未命中，已部分写入 ❌'))
sys.exit(0 if ok else 1)
