#!/usr/bin/env python3
"""从learn_records中提取yesorno=yes的数据项，合并到yes_data"""
import json, os, sys, glob, re
from datetime import datetime, timedelta

YES_DATA_TEMPLATE = "/data/news/json/yes_data/final_jsontpl.json"


def filter_items(items, section_name, template_keys=None):
    result = []
    for item in items:
        if isinstance(item, dict):
            clean = {k: v for k, v in item.items()}
            if template_keys:
                for k in template_keys:
                    if k not in clean:
                        clean[k] = ''
            result.append(clean)
    print(f"  {section_name}: 提取 {len(result)} 条")
    return result

def main():
    import argparse
    parser = argparse.ArgumentParser(description="从learn_records提取选中数据到yes_data")
    parser.add_argument("input", help="输入文件名（不含路径，如 0530data_2.json）")
    parser.add_argument("output", help="输出文件名（不含路径，如 0531data.json）")
    args = parser.parse_args()

    print(f"[{datetime.now().strftime('%H:%M:%S')}] 筛选yes_data")

    learn_path = args.input
    if not os.path.exists(learn_path):
        print(f"❌ 文件不存在: {learn_path}")
        sys.exit(1)

    mmdd = os.path.basename(args.output).replace('data.json', '').split('_')[0]
    print(f"  源文件: {learn_path}")
    print(f"  输出: {args.output}（{mmdd}）")

    # 2. 读取数据
    with open(learn_path, 'r', encoding='utf-8') as f:
        learn_data = json.load(f)

    # 3. 读取模板，拷贝为MMDD文件
    if not os.path.exists(YES_DATA_TEMPLATE):
        print(f"❌ 模板文件不存在: {YES_DATA_TEMPLATE}")
        sys.exit(1)

    with open(YES_DATA_TEMPLATE, 'r', encoding='utf-8') as f:
        yes_data = json.load(f)

    # 4. 提取各板块yesorno=yes的数据
    section_map = {
        'brand_hotspots': 'brand_hotspots',
        'vehicle_hotspots': 'vehicle_hotspots',
        'social_hotspots': 'social_hotspots',
        'hyundai_buzz_topics_domestic': 'hyundai_buzz_topics_domestic',
        'hyundai_buzz_topics_international': 'hyundai_buzz_topics_international'
    }

    # 获取模板中各板块的字段列表
    template_keys_map = {}
    for k, v in yes_data.items():
        if isinstance(v, list) and v and isinstance(v[0], dict):
            template_keys_map[k] = list(v[0].keys())
        elif isinstance(v, list):
            template_keys_map[k] = []

    for learn_key, yes_key in section_map.items():
        # learn_data是list结构 [{name, list}, ...]
        learn_list = []
        if isinstance(learn_data, list):
            for item in learn_data:
                if item.get('name') == learn_key:
                    learn_list = item.get('list', [])
                    break
        elif isinstance(learn_data, dict):
            learn_list = learn_data.get(learn_key, [])

        filtered = filter_items(learn_list, learn_key, template_keys_map.get(yes_key))
        yes_data[yes_key] = filtered if filtered else []

    # 4.5 校验：summary 和 focus_point 不能为空
    sections_to_check = [
        'brand_hotspots',
        'vehicle_hotspots',
        'social_hotspots',
        'hyundai_buzz_topics_domestic',
        'hyundai_buzz_topics_international'
    ]

    has_empty = False
    for sec in sections_to_check:
        sec_list = yes_data.get(sec, [])
        for idx, entry in enumerate(sec_list):
            if not entry.get('summary', '').strip():
                print(f'\n❌ 错误: {sec}[{idx}] summary 为空')
                print(f'   标题: {entry.get("title", "(无标题)")}')
                has_empty = True
            if not entry.get('focus_point', '').strip():
                print(f'\n❌ 错误: {sec}[{idx}] focus_point 为空')
                print(f'   标题: {entry.get("title", "(无标题)")}')
                has_empty = True

    if has_empty:
        print('\n🚫 数据不完整，中止保存。请先补全后再执行。')
        sys.exit(1)

    # 5. 补全日期字段
    report_date = f"2026-{mmdd[:2]}-{mmdd[2:]}"
    yesterday = (datetime.strptime(report_date, "%Y-%m-%d") - timedelta(days=1)).strftime("%Y-%m-%d")
    yes_data['report_date'] = report_date
    yes_data['data_time_range'] = f"{yesterday} 07:00 至 {report_date} 07:00"
    yes_data['hero_summary'] = ["", "", ""]

    # 6. 保存
    output_path = args.output
    with open(output_path, 'w', encoding='utf-8') as f:
        json.dump(yes_data, f, ensure_ascii=False, indent=2)

    total = sum(len(yes_data.get(k, [])) for k in ['brand_hotspots', 'vehicle_hotspots', 'social_hotspots'])
    print(f"\n✅ 已保存 {output_path}（共{total}条yes数据）")

if __name__ == '__main__':
    main()
