#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""补齐 watchlist 第二层：行业龙头 / 同赛道厂商（查巨潮 orgId）。

输出：数据/market_intel/v01/watchlist_v2.json
三层：客户主体 / 行业龙头 / 同赛道厂商（非我方客户，用于判断景气度与竞争态势）
"""
import json
import os
import time

import requests

W = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
UA = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 '
      '(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36')
S = requests.Session()
S.headers.update({'User-Agent': UA, 'X-Requested-With': 'XMLHttpRequest',
                  'Referer': 'http://www.cninfo.com.cn/'})

CANDIDATES = [
    ('圣湘生物', '688289', '行业龙头'),
    ('硕世生物', '688399', '行业龙头'),
    ('安图生物', '603658', '行业龙头'),
    ('万孚生物', '300482', '行业龙头'),
    ('博晖创新', '300318', '行业龙头'),
    ('达安基因', '002030', '同赛道厂商'),
    ('凯普生物', '300639', '同赛道厂商'),
    ('透景生命', '300642', '同赛道厂商'),
    ('采纳股份', '301122', '同赛道厂商'),
    ('明德生物', '002932', '同赛道厂商'),
    ('中元汇吉', '', '同赛道厂商'),   # 未上市，占位
    ('诺辉健康', '06606', '同赛道厂商'),  # 港股，巨潮无
]

out = []
for name, code, tier in CANDIDATES:
    if not code:
        out.append({'名称': name, '代码': '', '层': tier, 'orgId': '', '状态': '未上市/无 A 股代码'})
        print('  %-10s %-8s %s' % (name, code or '—', '未上市/无 A 股代码'))
        continue
    org, zw, cat = None, None, None
    for kw in (code, name):
        try:
            r = S.post('http://www.cninfo.com.cn/new/information/topSearch/query',
                       data={'keyWord': kw, 'maxNum': 8}, timeout=20)
            for it in (r.json() or []):
                if str(it.get('code')) == str(code):
                    org, zw, cat = it.get('orgId'), it.get('zwjc'), it.get('category')
                    break
        except Exception:
            pass
        time.sleep(1.0)
        if org:
            break
    out.append({'名称': name, '代码': code, '层': tier, 'orgId': org or '', '简称': zw or '',
                '类别': cat or '', '状态': 'OK' if org else '未取到 orgId（该主体在巨潮无公告）'})
    print('  %-10s %-8s orgId=%-14s %s' % (name, code, org or '—', 'OK' if org else '未取到'))

os.makedirs(os.path.join(W, '数据/market_intel/v01'), exist_ok=True)
p = os.path.join(W, '数据/market_intel/v01/watchlist_v2.json')
json.dump({'说明': '巨潮公告 watchlist 第二层（行业龙头/同赛道），用于判断景气度与竞争态势',
           '生成': time.strftime('%Y-%m-%d %H:%M'), 'items': out},
          open(p, 'w', encoding='utf-8'), ensure_ascii=False, indent=1)
ok = sum(1 for x in out if x['状态'] == 'OK')
print('\n✅ watchlist_v2 已保存：%d 家取到 orgId / 共 %d 家 → %s' % (ok, len(out), p))
