#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
merge_json_folder.py

把一个文件夹中的所有 JSON 文件合并成一个大的 JSON 文件，保持原有数组结构并去重。

使用方法：
    python merge_json_folder.py /path/to/json_dir merged.json

如果不提供输出文件名，默认写入 "merged.json" 于当前目录。
"""
import os.path
import sys
import json
import pathlib
from typing import List, Dict

from pathlib import Path
from pilot.base.file_operation import read_json_file_lines
from pilot.job.impl.base_job import BaseJob


class MakeDic(BaseJob):

    merged_file_file_path = ''
    def merge_json_folder(self, folder: pathlib.Path) -> List[Dict]:
        """
        合并 folder 中所有 *.json 文件的内容，去重后返回列表。
        去重规则：以 en_name 为唯一键，只保留第一次出现的记录。
        """
        merged_list = []
        for json_file in sorted(folder.glob('*.json')):
            try:
                items = read_json_file_lines(json_file)
            except Exception as e:
                continue

            for obj in items:
                merged_list.append(obj)
        # 按原始出现顺序（文件名排序 + 文件内部顺序）返回列表
        return merged_list


    def write_merged_json(self, data: List[Dict], out_path: Path):
        """把合并后的列表写入文件，使用 UTF‑8 编码和 4 空格缩进。"""
        out_path.parent.mkdir(parents=True, exist_ok=True)
        with out_path.open('w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=4)


    def run(self):

        json_dir = Path(self.file_path).parent
        project_name_json_name = json_dir.name + '.dic.json'
        output_file = json_dir / project_name_json_name
        if not os.path.exists(output_file):

            merged = self.merge_json_folder(json_dir)
            self.write_merged_json(merged, output_file)

        self.merged_file_file_path = str(output_file)

        super().run()




