import csv
import json
import os

# ========== 核心配置（精准匹配你的行号要求） ==========
CSV_FILES = [
    "二维表01_2026_02_06_17_29_38.csv",
    "二维表01_2026_02_06_17_30_47.csv",
    "二维表01_2026_02_06_17_32_55.csv",
    "二维表01_2026_02_06_17_33_44.csv",
    "二维表01_2026_02_06_17_34_14.csv",
    "二维表01_2026_02_06_18_47_09.csv",
    "二维表01_2026_02_06_18_51_16.csv",
    "二维表01_2026_02_06_19_01_50.csv",
    "二维表01_2026_02_06_19_03_52.csv",
    "二维表01_2026_02_06_19_06_28.csv",
    "二维表01_2026_02_06_19_07_27.csv",
    "二维表01_2026_02_06_19_07_55.csv",
    "二维表01_2026_02_06_19_12_09.csv",
    "二维表01_2026_02_06_19_15_14.csv"
]
OUTPUT_JSON = "items.json"
CSV_ENCODING = "gbk"  # ANSI编码必选gbk
START_ROW_INDEX = 3   # ✅ 0开头，从第3行开始读取（跳过前3行备注/字段行）
# ====================================================

# 自定义CSV解析规则（兼容空值/末尾逗号/引号）
csv.register_dialect(
    'mini_csv',
    delimiter=',',
    quotechar='"',
    doublequote=True,
    skipinitialspace=False,
    lineterminator='\n',
    quoting=csv.QUOTE_MINIMAL
)

all_data = []
# 遍历所有指定CSV文件
for file_idx, file_name in enumerate(CSV_FILES, 1):
    file_path = os.path.abspath(file_name)
    
    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"[{file_idx}/{len(CSV_FILES)}] ❌ 未找到文件：{file_name}，跳过")
        continue
    
    print(f"[{file_idx}/{len(CSV_FILES)}] ✅ 开始处理：{file_name}")
    valid_rows = 0    # 有效数据行数
    skipped_rows = 0  # 跳过的前3行数量
    skipped_empty_id = 0  # 跳过的空ID行数
    
    try:
        with open(file_path, 'r', encoding=CSV_ENCODING, errors='replace') as f:
            reader = csv.reader(f, dialect='mini_csv')
            
            for line_num_0, row in enumerate(reader):  # line_num_0：0开头行号
                # 1. 强制跳过前3行（0开头的0/1/2行，对应1开头的1/2/3行）
                if line_num_0 < START_ROW_INDEX:
                    skipped_rows += 1
                    print(f"  📌 0开头第{line_num_0}行（1开头第{line_num_0+1}行）：跳过备注/字段行")
                    continue
                
                # 2. 补全列数到6列（解决空值导致的列数不足）
                fixed_row = row + [''] * (6 - len(row))
                
                # 3. 提取核心字段（严格匹配你的数据格式）
                # fixed_row[0] = 行号(1/2/3...)、fixed_row[1] = ID(4095...)
                # fixed_row[3] = 名称、fixed_row[4] = 描述
                item_id = fixed_row[1].strip()    # 第2列：物品ID
                item_name = fixed_row[3].strip()  # 第4列：物品名称
                item_desc = fixed_row[4].strip()  # 第5列：物品描述
                
                # 4. 只过滤ID为空的行（名称/描述空完全保留）
                if not item_id:
                    skipped_empty_id += 1
                    print(f"  ⚠️  0开头第{line_num_0}行（1开头第{line_num_0+1}行）：ID为空，跳过")
                    continue
                
                # 5. 去重：保留最后一个相同ID的记录
                all_data = [d for d in all_data if d['id'] != item_id]
                
                # 6. 添加到合并列表（空值正常保留）
                all_data.append({
                    "id": item_id,
                    "name": item_name,
                    "desc": item_desc
                })
                valid_rows += 1
        
        # 打印当前文件处理统计
        print(f"  ✨ 处理完成：有效数据{valid_rows}行 | 跳过前3行{skipped_rows}行 | 跳过空ID{skipped_empty_id}行")
    
    except Exception as e:
        print(f"  ❌ 处理出错：{str(e)}")
        continue

# 写入合并后的JSON文件
try:
    with open(OUTPUT_JSON, 'w', encoding='utf-8') as f:
        json.dump(
            all_data,
            f,
            ensure_ascii=False,  # 中文不转义
            indent=2,           # 格式化缩进
            separators=(',', ': ')
        )
    
    # 最终统计
    print(f"\n🎉 全部处理完成！")
    print(f"📊 合并后总有效数据：{len(all_data)} 条")
    print(f"📁 输出文件路径：{os.path.abspath(OUTPUT_JSON)}")
    
    # 验证JSON格式
    with open(OUTPUT_JSON, 'r', encoding='utf-8') as f:
        json.load(f)
    print(f"✅ JSON格式验证通过！可直接给PHP使用")

except Exception as e:
    print(f"❌ 写入JSON失败：{str(e)}")