#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""行业信息速览 · 推送文案生成器（v0.1）。

从 runs/<date>_items.jsonl 生成聊天可读的速览文案（目标 ≤1200 字）。
输出：runs/<date>_push.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')
items = [json.loads(l) for l in open(os.path.join(RUNS, DAY + '_items.jsonl'), encoding='utf-8') if l.strip()]
status = json.load(open(os.path.join(RUNS, DAY + '_status.json'), encoding='utf-8'))['status']
RECENT = (datetime.now() - timedelta(days=14)).strftime('%Y-%m-%d')


def clean(t):
    t = re.sub(r'\s+\d{1,4}\s+20\d{2}-\d{2}-\d{2}\s*$', '', t)
    t = re.sub(r'\s+20\d{2}-\d{2}-\d{2}\s*$', '', t)
    t = re.sub(r'\s+\d{1,4}\s*$', '', t)
    return t.strip(' -｜|')


BIZ = re.compile(r'注册证|批准|中标|合同|产能|专利|临床|GMP|收购|增资|投资|业绩|年报|半年报|季度|新品|上市|合作|签约|扩产|获证|CE|FDA|IVDR')
for i in items:
    i['标题'] = clean(i['标题'])
    i['业务相关'] = bool(BIZ.search(i['标题']))
    i.setdefault('日期', '')
    m = re.search(r'20\d{2}-\d{2}-\d{2}', i['日期'])
    i['日期'] = m.group(0) if m else ''

comp = [i for i in items if i['来源'].startswith('竞品官网') and i['日期'] >= RECENT]
cust = [i for i in items if i['来源'] == '巨潮公告' and i.get('业务相关')]
bid = [i for i in items if i['来源'].startswith(('全国公共资源交易', '检索源'))]

comp.sort(key=lambda x: x['日期'], reverse=True)
cust.sort(key=lambda x: x['日期'], reverse=True)
# 客户信号优先给体系上市主体（去除重复表述）
seen_c, cust_u = set(), []
for i in cust:
    k = (i['主体'], i['标题'][:18])
    if k in seen_c:
        continue
    seen_c.add(k)
    cust_u.append(i)

L = []
L.append('【行业信息速览 · %s】v0.1 试跑' % datetime.now().strftime('%m-%d'))
L.append('覆盖：客户体系公告 %d 条 ｜ 竞品官网 %d 条 ｜ 招投标 %d 条' % (
    len([i for i in items if i['来源'] == '巨潮公告']), len([i for i in items if i['来源'].startswith('竞品官网')]), len(bid)))
L.append('')
L.append('■ 竞品动态（近 14 天）')
for it in comp[:6]:
    L.append('· %s｜%s' % (it['主体'], it['标题'][:52]))
    L.append('  %s' % it['链接'])
L.append('')
L.append('■ 客户信号 ⭐')
for it in cust_u[:8]:
    L.append('· %s｜%s｜%s' % (it['主体'][:16], it['日期'], it['标题'][:44]))
if not cust_u:
    L.append('· 本期无（客户公告均为常规事项）')
L.append('')
L.append('■ 招投标 / 采购')
for it in bid[:4]:
    L.append('· %s' % it['标题'][:60])
L.append('')
ok = sum(1 for s in status if s[2] == 'live')
L.append('■ 源状态：正常 %d ／ 待接入 %d ｜ 完整摘要在工作区 runs/%s_v01试跑.md' % (
    ok, sum(1 for s in status if s[2] in ('pending', 'fail', 'empty')), DAY))

txt = '\n'.join(L)
open(os.path.join(RUNS, DAY + '_push.txt'), 'w', encoding='utf-8').write(txt)
print(txt)
print('\n[字数] %d 字' % len(re.sub(r'https?://\S+', '', txt)))
