#!/usr/bin/env python3.12
"""阶段4：写入 hero_summary + strategy_actions（周日规则：保留 3 条，不 clear）"""
import json, re, sys

P = '/data/news/json/0928data.json'
d = json.load(open(P, encoding='utf-8'))

def cl(s): return len(re.sub(r'[^\w]', '', s or '', flags=re.UNICODE))

# ---------- hero_summary ----------
HERO = [
    "安踏官宣蒯曼为代言人;仰望新旗舰10月首搭固态电池",          # [0] 品牌 + 车型
    "OpenAI暂停模型训练;宇树390万载人机甲爆火",                 # [1] 社会（heat 降序前2：97 / 95）
    "帕里斯帝累计破30万辆;北京现代月均仅6777台",                # [2] 现代板块
]

# ---------- strategy_actions（周日：扫描本周 09-21~09-27 全部最终文件综合研判）----------
SA = [
    {
        "core_topic": "新车集中上市 主销价格带持续下移",
        "decision_advice": (
            "本周新车几乎全部落在10—25万元主销区间，燃油与纯电同步压价："
            "马自达EZ-60限时11.39万、北京BJ40增程18.48万，"
            "激光雷达与长续航等原高端配置被下放为主销卖点；"
            "比亚迪海鸥轴距加长150mm、尺寸大幅放大也是同一逻辑。"
            "对现代而言，伊兰特、途胜与狮铂拓界所在价格带的竞品密度进一步上升，"
            "终端若只跟随降价会持续蚀利，应把配置差与技术点做成可对比的话术。"
        ),
        "actions": [
            "对标EZ-60与海鸥核价，重排终端话术",
            "把激光雷达下放讲成可对比的配置卖点",
            "国庆前锁定冲量节奏并优化库存结构",
        ],
    },
    {
        "core_topic": "智驾与机器人从概念转入量产竞赛",
        "decision_advice": (
            "本周智驾配置继续下沉：华为乾崑方案进入越野与轿车主销车型，"
            "L3架构轿跑SUV定档9月28日上市；集团侧同步落子——"
            "自动驾驶负责人到任并锁定2029年量产、摩比斯拿下人形机器人全部执行器订单、"
            "2030路线图新增127万辆产能。"
            "对现代而言，油车需把智驾叙事挂到可验证的量产与OTA时点上，"
            "否则难以进入消费者的比价清单。"
        ),
        "actions": [
            "核实本品智驾版本的量产与OTA时点",
            "整理竞品智驾配置与价格的对应关系",
            "为终端准备智驾实车演示的标准流程",
        ],
    },
    {
        "core_topic": "双节营销从打折转向联名与代言",
        "decision_advice": (
            "本周跨中秋国庆的品牌动作几乎都由联名与明星驱动：蜂花请王俊凯、"
            "OPPO联手李现、GAP×成毅、小牛电动为宋雨琦造痛街、"
            "安踏在亚运夺冠次日官宣代言，单纯的折扣促销声量明显偏低。"
            "对现代而言，节点预算应更多押在内容资产与代言人共鸣上，"
            "把双节流量转成到店理由。"
        ),
        "actions": [
            "围绕亚运与中秋热点策划门店内容",
            "把代言与联名素材改成终端到店话术",
            "锁定节日期间试驾预约的转化指标",
        ],
    },
]

# ---------- 校验 ----------
print('=== hero_summary 校验 ===')
ok = True
for i, h in enumerate(HERO):
    n = cl(h); ev = h.count(';') + 1
    flag = '✅' if (n <= 25 and ev == 2) else '⛔'
    if flag == '⛔': ok = False
    print(f'  {flag} [{i}] {n} 内容字 / {ev} 事件 :: {h}')

print('=== strategy_actions 校验 ===')
for i, a in enumerate(SA):
    ct = cl(a['core_topic'])
    ac = [cl(x) for x in a['actions']]
    f1 = '✅' if 10 <= ct <= 20 else '⛔'
    f2 = '✅' if all(15 <= x <= 20 for x in ac) else '⛔'
    if '⛔' in (f1, f2): ok = False
    print(f'  {f1} core_topic {ct}字: {a["core_topic"]}')
    print(f'  {f2} actions {ac}')

if not ok:
    print('\n⛔ 校验未通过，未写入'); sys.exit(1)

d['hero_summary'] = HERO
d['strategy_actions'] = SA
json.dump(d, open(P, 'w', encoding='utf-8'), ensure_ascii=False, indent=2)

print('\n✅ 已写入', P)
print('  report_date:', d.get('report_date'))
print('  data_time_range:', d.get('data_time_range'))
print('  strategy_actions:', len(d['strategy_actions']), '条（周日规则：运行日=周日 → 不 clear）')
