// function safeParseJson(input) {
//   if (!input) return null;

//   // Already object
//   if (typeof input === "object") return input;

//   let text = String(input).trim();

//   try {
//     // Try direct JSON first
//     return JSON.parse(text);
//   } catch {
//     try {
//       // Convert Python-style dict to valid JSON
//       // 1. Replace single quotes with double quotes
//       // 2. Quote unquoted property names if missing (rare)
//       const fixed = text
//         .replace(/'/g, '"') // convert single quotes to double
//         .replace(/([{,]\s*)([a-zA-Z0-9_]+)\s*:/g, '$1"$2":'); // ensure keys are quoted

//       return JSON.parse(fixed);
//     } catch (e2) {
//       console.error("safeParseJson: failed to parse JSON:", e2.message);
//       console.error("Offending input:", text);
//       return null;
//     }
//   }
// }

// module.exports = { safeParseJson };


function safeParseJson(input, { strict = false } = {}) {
  if (input == null) return null;
  if (typeof input === "object") return input;

  const text = String(input).trim();
  if (!text) return null;

  try {
    return JSON.parse(text);
  } catch (err) {
    // Attempt repair only if not in strict mode
    if (strict) {
      console.warn("safeParseJson: strict mode enabled, skipping repair");
      return null;
    }

    try {
      const fixed = text
        .replace(/'/g, '"')
        .replace(/([{,]\s*)([a-zA-Z0-9_]+)\s*:/g, '$1"$2":');
      return JSON.parse(fixed);
    } catch (e2) {
      console.error("safeParseJson failed:", e2.message, "Input:", text.slice(0, 200));
      return null;
    }
  }
}

module.exports = { safeParseJson };
