import csv
import json
import os


def csv_to_json(csv_file_path, json_file_path=None, encoding='utf-8'):
    """
    将CSV文件转换为JSON文件

    参数:
    csv_file_path: CSV文件路径
    json_file_path: JSON文件输出路径（可选，默认为CSV同目录同名.json）
    encoding: 文件编码格式
    """

    # 检查CSV文件是否存在
    if not os.path.exists(csv_file_path):
        print(f"错误：找不到CSV文件 '{csv_file_path}'")
        return False

    # 设置JSON输出路径
    if json_file_path is None:
        base_name = os.path.splitext(csv_file_path)[0]
        json_file_path = f"{base_name}.json"

    try:
        # 读取CSV文件
        with open(csv_file_path, 'r', encoding=encoding) as csv_file:
            # 使用csv.DictReader读取数据
            csv_reader = csv.DictReader(csv_file)

            # 将数据转换为列表
            data = list(csv_reader)

            # 数据类型转换（可选）
            for item in data:
                # 尝试将数值字段转换为浮点数
                for key in ['txAmount', 'txBalance']:
                    if key in item and item[key]:
                        try:
                            item[key] = float(item[key])
                        except ValueError:
                            pass  # 如果转换失败，保持原样

                # 创建完整的日期时间字段（可选）
                if 'txDate' in item and 'txTime' in item:
                    item['txDateTime'] = f"{item['txDate']} {item['txTime']}"

            print(f"成功读取 {len(data)} 条记录")

            # 写入JSON文件
            with open(json_file_path, 'w', encoding='utf-8') as json_file:
                json.dump(data, json_file, ensure_ascii=False, indent=2)

            print(f"JSON文件已保存到: {json_file_path}")
            print(f"文件大小: {os.path.getsize(json_file_path)} 字节")

            # 显示前几条记录作为示例
            print("\n前3条记录示例:")
            for i, record in enumerate(data[:3]):
                print(f"\n记录 {i + 1}:")
                for key, value in record.items():
                    print(f"  {key}: {value}")

            return True

    except FileNotFoundError:
        print(f"错误：找不到文件 '{csv_file_path}'")
        return False
    except UnicodeDecodeError:
        print(f"错误：编码问题，请尝试使用不同的编码格式（如'gbk'）")
        return False
    except Exception as e:
        print(f"错误：处理文件时发生错误 - {str(e)}")
        return False


# 使用示例
if __name__ == "__main__":
    # 请根据实际情况修改这些参数
    csv_file = "交易流水样例数据.csv"  # 您的CSV文件名
    json_file = "test_temp_agriculture_transaction_flow.json"  # 输出的JSON文件名
    file_encoding = "utf-8"  # 文件编码

    print("开始转换CSV到JSON...")
    print(f"CSV文件: {csv_file}")
    print(f"JSON文件: {json_file}")
    print(f"编码格式: {file_encoding}")
    print("-" * 50)

    # 执行转换
    success = csv_to_json(csv_file, json_file, file_encoding)

    if success:
        print("\n✓ 转换完成！")
    else:
        print("\n✗ 转换失败，请检查错误信息")
