#!/usr/bin/python3.12
"""从learn_records中提取yesorno=yes的数据项，按原结构输出到yes_data"""
import json, os, sys, copy


def filter_items(items, template_keys=None):
    """过滤yesorno=yes并补全模板字段"""
    result = []
    for item in items:
        if isinstance(item, dict):
            if 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)
        elif isinstance(item, list):
            sub = filter_items(item, template_keys)
            if sub:
                result.append(sub)
        else:
            result.append(item)
    return result

def get_template_keys():
    """从模板文件获取各板块的字段列表"""
    template_path = "/data/news/json/yes_data/data.json"
    if not os.path.exists(template_path):
        return {}
    with open(template_path) as f:
        tpl = json.load(f)
    result = {}
    for k, v in tpl.items():
        if isinstance(v, dict):
            result[k] = list(v.keys())
        elif isinstance(v, list) and v and isinstance(v[0], dict):
            result[k] = list(v[0].keys())
        elif isinstance(v, list):
            result[k] = []
    return result

def process_structure(data, template_keys):
    """过滤yes条目并按模板补全字段"""
    if isinstance(data, list):
        if data and isinstance(data[0], dict) and 'name' in data[0] and 'list' in data[0]:
            result = []
            for item in data:
                new_item = copy.deepcopy(item)
                name = new_item.get('name', '')
                keys = template_keys.get(name, None)
                if isinstance(new_item.get('list'), list):
                    new_item['list'] = filter_items(new_item['list'], keys)
                result.append(new_item)
            return result
        else:
            return filter_items(data, None)
    elif isinstance(data, dict):
        result = {}
        for k, v in data.items():
            if isinstance(v, list):
                result[k] = filter_items(v, template_keys.get(k))
            else:
                result[k] = v
        return result
    return data

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

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

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

    template_keys = get_template_keys()

    # 过滤yesorno=yes的数据，按模板补全字段
    output_data = process_structure(learn_data, template_keys)

    output_path = args.output
    os.makedirs(os.path.dirname(args.output), exist_ok=True)
    with open(output_path, 'w', encoding='utf-8') as f:
        json.dump(output_data, f, ensure_ascii=False, indent=2)

    total = 0
    if isinstance(output_data, list):
        for item in output_data:
            if isinstance(item, dict) and 'list' in item:
                total += len(item['list'])
    elif isinstance(output_data, dict):
        for k, v in output_data.items():
            if isinstance(v, list):
                total += len(v)
    print(f"✅ 已保存 {output_path}（共{total}条yes数据）")

if __name__ == '__main__':
    main()
