import BigIntUtils from "./BigIntUtils";

/**
 * JSON工具类 - 用于处理大整数的JSON序列化和反序列化
 */
export default class JsonUtils {
  
  /**
   * 自定义JSON解析，将大整数转换为字符串
   * @param jsonString JSON字符串
   * @returns 解析后的对象
   */
  static parse(jsonString: string): any {
    return JSON.parse(jsonString, (key, value) => {
      // 检查是否为数字且超出安全整数范围
      if (typeof value === 'number' && !Number.isSafeInteger(value)) {
        return value.toString(); // 转换为字符串以保持精度
      }
      return value;
    });
  }

  /**
   * 自定义JSON序列化，确保大整数正确序列化
   * @param obj 要序列化的对象
   * @returns JSON字符串
   */
  static stringify(obj: any): string {
    return JSON.stringify(obj, (key, value) => {
      // 检查是否为数字且超出安全整数范围
      if (typeof value === 'number' && !Number.isSafeInteger(value)) {
        return value.toString(); // 转换为字符串以保持精度
      }
      return value;
    });
  }

  /**
   * 深度克隆对象，确保大整数正确处理
   * @param obj 要克隆的对象
   * @returns 克隆后的对象
   */
  static deepClone(obj: any): any {
    return this.parse(this.stringify(obj));
  }

  /**
   * 检查对象中是否包含大整数
   * @param obj 要检查的对象
   * @returns 是否包含大整数
   */
  static hasBigIntegers(obj: any): boolean {
    const jsonStr = JSON.stringify(obj);
    return jsonStr.includes('"') && /:\s*"\d{16,}"/.test(jsonStr);
  }
} 