import { readFileSync, writeFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { join, dirname } from 'path';

const __dirname = dirname(fileURLToPath(import.meta.url));
const foldsPath = join(__dirname, '../node_modules/folds/dist/index.js');

try {
  let content = readFileSync(foldsPath, 'utf8');

  // Defensive guard: if src is not a function, render null instead of crashing
  const original = 'children: src(filled)';
  const patched = 'children: typeof src === "function" ? src(filled) : null';

  if (content.includes(patched)) {
    console.log('folds patch already applied.');
  } else if (content.includes(original)) {
    content = content.replace(original, patched);
    writeFileSync(foldsPath, content, 'utf8');
    console.log('Applied defensive Icon src guard to folds.');
  } else {
    // Genuine "patch could not be applied" case: the target string is gone
    // (folds renamed/restructured it) AND it isn't already patched. Fail hard
    // so the postinstall hook / CI breaks loudly instead of silently shipping
    // an unpatched folds (which crashes at render with "src is not a function").
    console.error(
      'ERROR: folds Icon patch target not found - folds may have updated. ' +
        'Update the patch target string in scripts/patch-folds.mjs before building.',
    );
    process.exit(1);
  }
} catch (e) {
  console.error('ERROR: Could not patch folds:', e.message);
  process.exit(1);
}
