#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""导出竞品对标基准为 Excel（含来源链接），供人工核对与补充。

输入：数据/competitor_benchmark.json
输出：产品与市场/竞品对标/竞品对标_四家_<日期>.xlsx（多 Sheet）+ 同名 CSV
"""
import json
import os

import pandas as pd

W = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
SRC = os.path.join(W, '数据/competitor_benchmark.json')
OUTDIR = os.path.join(W, '产品与市场/竞品对标')


def main():
    d = json.load(open(SRC, encoding='utf-8'))
    items = d['items']
    os.makedirs(OUTDIR, exist_ok=True)
    stamp = pd.Timestamp.now().strftime('%Y%m%d')
    xlsx = os.path.join(OUTDIR, '竞品对标_四家_%s.xlsx' % stamp)

    rows = [{'品牌': e['品牌'], '竞品货号': e['货号'], '品名': e['品名'], '品类': e['品类'],
             '特性标签': '＋'.join(e.get('标签') or []),
             '公开卖点': ' ／ '.join(e.get('卖点') or []),
             '数据类型': e.get('数据类型', ''), '来源链接': e.get('来源', '')} for e in items]
    df = pd.DataFrame(rows)

    stat_brand = df.groupby('品牌', as_index=False).size().rename(columns={'size': '条目数'})
    stat_cat = df.groupby('品类', as_index=False).size().rename(columns={'size': '条目数'}).sort_values('条目数', ascending=False)
    stat_tag = pd.Series([t for e in items for t in (e.get('标签') or [])]).value_counts().rename_axis('标签').reset_index(name='条目数')
    ours = pd.DataFrame([{'我方分类': k, '可对标货号': '、'.join(v)} for k, v in (d.get('我方可对标货号(按分类)') or {}).items()])
    calib = pd.DataFrame({'口径说明': [d.get('口径', ''), '公开宣称 ≠ 客户实测；型号级差异须以实验室数据或客户实测为准。',
                                   '诺唯赞官网 bio.vazyme.com 的 /product/* 页返回 403（WAF 拦截），参数待补。']})

    with pd.ExcelWriter(xlsx, engine='openpyxl') as w:
        df.to_excel(w, sheet_name='竞品总表', index=False)
        stat_brand.to_excel(w, sheet_name='按品牌统计', index=False)
        stat_cat.to_excel(w, sheet_name='按品类统计', index=False)
        stat_tag.to_excel(w, sheet_name='特性标签统计', index=False)
        ours.to_excel(w, sheet_name='我方可对标货号', index=False)
        calib.to_excel(w, sheet_name='口径说明', index=False)
        ws = w.sheets['竞品总表']
        widths = {'A': 9, 'B': 14, 'C': 46, 'D': 18, 'E': 12, 'F': 70, 'G': 14, 'H': 52}
        for col, wd in widths.items():
            ws.column_dimensions[col].width = wd
    csv = os.path.join(OUTDIR, '竞品对标_四家_%s.csv' % stamp)
    df.to_csv(csv, index=False, encoding='utf-8-sig')
    print('→', xlsx)
    print('→', csv)
    print('条目 %d ｜ 品牌 %s ｜ 品类 %d ｜ 标签 %s' % (
        len(df), dict(df['品牌'].value_counts()), df['品类'].nunique(),
        dict(stat_tag.set_index('标签')['条目数'])))
    # 诺唯赞现状
    nv = df[df['品牌'] == '诺唯赞']
    print('\n诺唯赞当前条目:', len(nv))
    for _, r in nv.iterrows():
        print('  ', r['竞品货号'], '|', r['品名'][:60], '|', r['数据类型'])


if __name__ == '__main__':
    main()
