#!/usr/bin/env python3.12
# -*- coding: utf-8 -*-
"""Phase 3 收尾：summary 精简/重写 + focus_point 柔和化（同步 yes_data + 最终文件）"""
import json

# (板块, idx, summary新值)
SUMMARY_FIXES = [
    ('brand_hotspots', 2, '迪奥携手法国动画工作室Remembers推动漫短片，将Miss Dior香水拟人化，讲述爱与香水的浪漫故事。'),
    ('brand_hotspots', 3, '库迪联名《花开锦绣》，以"护花使者"限定周边配合剧情高光，延续剧粉喜爱。'),
    ('brand_hotspots', 4, '图拉斯冠名HYROX中国赛季，发布纪录片《回看自己》，传递"有支点，就能撑住"的品牌理念。'),
    ('vehicle_hotspots', 0, '2026成都车展上，大众安徽与众08猎影版开启预售，售价23万元，9月12日交付。'),
    ('vehicle_hotspots', 1, '2026成都车展上，荣威家越07首秀，此前已开启盲订，999元意向金锁定先享权益。'),
    ('vehicle_hotspots', 2, '2026成都车展上，奥迪E7X先锋quattro热爱版上市，售价30.98万元，搭载宁德时代电池。'),
    ('social_hotspots', 0, '交通运输部印发方案，构建"1+N"精品自驾公路体系，规划约6万公里"三环四横五纵"路线。'),
    ('social_hotspots', 1, '财政部介绍"十五五"财政政策：支出转向投资于人、支持国内消费，增强国内大循环内生动力。'),
    ('social_hotspots', 2, '宇树与长鑫同属科创板IPO，但本金门槛与中签率差距悬殊，宇树中签率仅长鑫约1/15。'),
    ('social_hotspots', 3, '2026成都车展奔驰展台惊现人形机器人，懂车帝称奔驰或布局具身智能，科技跨界成看点。'),
    ('social_hotspots', 4, '马斯克称AI领域中国是最强竞争对手，并转发15年前"终局之战将与中国较量"的预测。'),
    ('hyundai_buzz_topics_domestic', 0, '北京现代艾尼氪V成都车展开启预售，11.99-13.99万元，纯电续航最高650km。'),
    ('hyundai_buzz_topics_domestic', 2, '北京现代库斯途优惠高达4.6万元，2024款指导价17.18-22.08万，优惠后12.58万起。'),
    ('hyundai_buzz_topics_international', 0, '现代汽车CEO称，2028年前将佐治亚工厂产能从50万辆提升至70-80万辆。'),
    ('hyundai_buzz_topics_international', 2, '现代汽车工会8月21日全面罢工，约3.9万人参与，系2016年以来首次。'),
]

# (板块, idx, focus_point新值) — 柔和化
FP_FIXES = [
    ('vehicle_hotspots', 3, '高定联名凸显审美差异化，品牌可借设计共鸣和体验营销，吸引年轻用户。'),
    ('vehicle_hotspots', 4, '汽车品牌不妨借明星代言绑定新车首发，通过体验营销和用户运营强化年轻化心智。'),
]

def apply_fixes(path, is_final=False):
    d = json.load(open(path))
    for sec, idx, val in SUMMARY_FIXES:
        if is_final:
            if sec in d and idx < len(d[sec]):
                d[sec][idx]['summary'] = val
        else:
            for s in d:
                if s.get('name') == sec and idx < len(s['list']):
                    s['list'][idx]['summary'] = val
                    break
    for sec, idx, val in FP_FIXES:
        if is_final:
            if sec in d and idx < len(d[sec]):
                d[sec][idx]['focus_point'] = val
        else:
            for s in d:
                if s.get('name') == sec and idx < len(s['list']):
                    s['list'][idx]['focus_point'] = val
                    break
    json.dump(d, open(path, 'w'), ensure_ascii=False, indent=2)
    print(f'  ✅ 已更新: {path}')

apply_fixes('/data/news/json/yes_data/0821data.json')
apply_fixes('/data/news/json/0822data.json', is_final=True)

# 校验
fin = json.load(open('/data/news/json/0822data.json'))
print()
print('=== 修复后 summary 长度校验 ===')
allok = True
for k, items in fin.items():
    if not isinstance(items, list): continue
    for i, it in enumerate(items):
        if not isinstance(it, dict): continue
        sm = it.get('summary','')
        ln = len(sm)
        flag = ''
        if k == 'hyundai_buzz_topics_domestic':
            if not (30 <= ln <= 45): flag = f'⚠️ 需{30}-45字(现{ln})'
        elif ln > 45:
            flag = f'⚠️ 超45(现{ln})'
        if flag:
            allok = False
            print(f'  {k}[{i}] len={ln} {flag}')
print('  长度全部合格 ✅' if allok else '  仍有超长 ❌')

print()
print('=== focus_point 生硬「应」复查（排除响应/应对/应用等词内嵌） ===')
import re
for k, items in fin.items():
    if not isinstance(items, list): continue
    for i, it in enumerate(items):
        if not isinstance(it, dict): continue
        fp = it.get('focus_point','')
        # 检测祈使「应」：应以/应借/应加/应把/应更/应通/应强 等
        if re.search(r'应(以|借|加|把|更|通|强|从|向|对|用|在|为|将|与|和|于|开|做|重|持)', fp):
            print(f'  ⚠️ {k}[{i}] 祈使应: {fp}')
print('  focus_point 检查完成')
