#!/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/data.json"
LEARN_DIR = "/data/news/learn_records/"
YES_DIR = "/data/news/json/yes_data/"

def find_latest_learn():
    files = glob.glob(os.path.join(LEARN_DIR, "0*data*.json"))
    if not files:
        print("❌ learn_records 下无数据文件")
        sys.exit(1)

    def sort_key(f):
        name = os.path.basename(f).replace('.json', '')
        # 提取序号: 0530data → 0, 0530data_2 → 2
        m = re.search(r'_(\d+)$', name)
        return int(m.group(1)) if m else 0

    latest = max(files, key=sort_key)
    mmdd = os.path.basename(latest).split('data')[0]
    print(f"  最新源文件: {latest}（序号{sort_key(latest)}）")
    return latest, mmdd

def filter_yes(items, section_name, template_keys=None):
    result = []
    for item in items:
        if isinstance(item, dict) and item.get('yesorno') == 'yes':
            clean = {k: v for k, v in item.items() if k != 'yesorno'}
            # 补全模板中缺失的字段
            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 = os.path.join(LEARN_DIR, 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_yes(learn_list, learn_key, template_keys_map.get(yes_key))
        yes_data[yes_key] = filtered if filtered else []

    # 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 = os.path.join(YES_DIR, 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()
