#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""行业信息 · v0.1 增强版摘要渲染器（逐条五要素）。

输入：runs/<date>_enriched.jsonl
输出：runs/<date>_v01增强版.md  +  runs/<date>_push_enhanced.txt
"""
import json
import os
import re
import sys
from datetime import datetime, timedelta

W = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
RUNS = os.path.join(W, '数据/market_intel/runs')
DAY = sys.argv[1] if len(sys.argv) > 1 else datetime.now().strftime('%Y%m%d')
data = json.load(open(os.path.join(RUNS, DAY + '_enriched.jsonl'), encoding='utf-8'))
items = [i for i in data if isinstance(i.get('要点'), dict) and '错误' not in i['要点']]
failed = [i for i in data if not (isinstance(i.get('要点'), dict) and '错误' not in i['要点'])]

comp = [i for i in items if i['来源'].startswith('竞品官网')]
cust = [i for i in items if i['来源'] == '巨潮公告']
bid = [i for i in items if i['来源'].startswith(('全国公共资源交易', '检索源'))]
for grp in (comp, cust, bid):
    grp.sort(key=lambda x: x.get('日期', ''), reverse=True)

OPP = re.compile(r'机会|可切入|需求|适配|替代|对标|导入|试|共享|开放|窗口')


def block(idx, it):
    p = it['要点']
    L = []
    L.append('#### %s. %s' % (idx, it['标题'][:110]))
    L.append('')
    L.append('| 项 | 内容 |')
    L.append('|---|---|')
    for k in ('时间', '地点', '人物', '主体'):
        L.append('| %s | %s |' % (k, str(p.get(k, '未提及'))[:60]))
    L.append('| **事件** | **%s** |' % str(p.get('事件', '未提及'))[:110])
    L.append('| 关键事项 | %s |' % str(p.get('关键事项', '未提及'))[:300])
    L.append('| 与我方关联 | %s |' % str(p.get('与我方关联', '未提及'))[:200])
    L.append('| 原文 | %s |' % it['链接'])
    L.append('')
    return L


L = []
L.append('# 行业信息速览（增强版 · 逐条五要素）· %s\n' % DAY)
L.append('> 版本：v0.1 增强 ｜ 生成：%s ｜ 提炼条目：**%d** 条（失败 %d）' % (
    datetime.now().strftime('%Y-%m-%d %H:%M'), len(items), len(failed)))
L.append('> 引擎：DeepSeek（温度 0，仅依据正文，缺项标「未提及」）｜ 口径：时间 / 地点 / 人物 / 主体 / 事件 / 关键事项 / 与我方关联\n')
L.append('---\n')

L.append('## 一、竞品动态（%d 条）\n' % len(comp))
for brand in dict.fromkeys(i['主体'] for i in comp):
    L.append('### %s\n' % brand)
    for n, it in enumerate([x for x in comp if x['主体'] == brand], 1):
        L += block('%s-%d' % (brand[:2], n), it)

L.append('---\n')
L.append('## 二、客户信号 ⭐（%d 条）\n' % len(cust))
for n, it in enumerate(cust, 1):
    L += block('客户-%d' % n, it)

L.append('---\n')
L.append('## 三、招投标 / 采购（%d 条）\n' % len(bid))
for n, it in enumerate(bid, 1):
    L += block('招标-%d' % n, it)

L.append('---\n')
L.append('## 四、本期小结（自动汇总）\n')
opp = [i for i in items if OPP.search(str(i['要点'].get('与我方关联', '')))]
L.append('- 条目：竞品 %d ／ 客户 %d ／ 招投标 %d' % (len(comp), len(cust), len(bid)))
L.append('- 提炼出「与我方有关联」的条目：**%d 条**' % len(opp))
for i in opp[:8]:
    L.append('  - 【%s】%s → %s' % (i['主体'][:12], i['标题'][:44], str(i['要点'].get('与我方关联'))[:60]))
if failed:
    L.append('- 提炼失败（正文抓不到或空返回）：%d 条，原始条目仍在 items.jsonl' % len(failed))
L.append('')

open(os.path.join(RUNS, DAY + '_v01增强版.md'), 'w', encoding='utf-8').write('\n'.join(L))

# 推送文案（精简版）
P = []
P.append('【行业信息速览 · 增强版 %s】' % datetime.now().strftime('%m-%d'))
P.append('本期提炼 %d 条（竞品 %d ／ 客户 %d ／ 招投标 %d）' % (len(items), len(comp), len(cust), len(bid)))
P.append('')
P.append('■ 竞品动态')
for it in comp[:6]:
    p = it['要点']
    P.append('· %s｜%s' % (it['主体'], str(p.get('事件', it['标题']))[:46]))
    if p.get('关键事项') and p['关键事项'] != '未提及':
        P.append('   %s' % str(p['关键事项'])[:90])
P.append('')
P.append('■ 客户信号 ⭐')
for it in cust[:8]:
    p = it['要点']
    P.append('· %s｜%s｜%s' % (it['主体'][:14], p.get('时间', it.get('日期', '')), str(p.get('事件', ''))[:40]))
    if p.get('与我方关联') and p['与我方关联'] != '未提及':
        P.append('   关联：%s' % str(p['与我方关联'])[:70])
P.append('')
P.append('■ 招投标')
for it in bid[:4]:
    P.append('· %s' % str(it['要点'].get('事件', it['标题']))[:60])
P.append('')
P.append('■ 与我方有关联的条目 %d 条 ｜ 完整版：runs/%s_v01增强版.md' % (len(opp), DAY))
txt = '\n'.join(P)
open(os.path.join(RUNS, DAY + '_push_enhanced.txt'), 'w', encoding='utf-8').write(txt)

print('✅ 增强版摘要已生成')
print('   条目 %d（竞品 %d ／ 客户 %d ／ 招投标 %d）｜ 有关联 %d ｜ 失败 %d' % (
    len(items), len(comp), len(cust), len(bid), len(opp), len(failed)))
print('   文件: %s_v01增强版.md / %s_push_enhanced.txt' % (DAY, DAY))
