#!/usr/bin/env node
'use strict';
const fs = require('node:fs');
const path = require('node:path');

process.env.SC_TEST = '1';
const dumpPath = path.join(__dirname, 'engine-dump.js');
if (!fs.existsSync(dumpPath)) {
  console.error('Run gen-dump.js first');
  process.exit(1);
}
const t = require(dumpPath).__test;
t.ensureId();
t.deriveKeys();

const skip = new Set(['xiDagEval', 'xiClientEval', 'buildWebSdk', 'RelayPool', 'FormulaVM', 'SkyDB', 'ScenarioDetector', 'RoamResolver', 'Channel', 'Stream', 'Clock', 'SIOS', 'ADIS', 'ADO', 'MIND']);
const keys = Object.keys(t).filter((k) => typeof t[k] === 'function' && !skip.has(k)).sort();
const chunks = 6;
const per = Math.ceil(keys.length / chunks);
const outDir = path.join(__dirname, '..', 'suites', 'plans');

for (let i = 0; i < chunks; i++) {
  const slice = keys.slice(i * per, (i + 1) * per);
  const file = path.join(outDir, `plan-smoke-${String.fromCharCode(65 + i)}.test.js`);
  const calls = slice.map((k) => `  await smoke('${k}', t.${k});`).join('\n');
  const src = `#!/usr/bin/env node
'use strict';
const { load, ok, summary } = require('../../helpers/harness');
const t = load();

async function smoke(name, fn) {
  if (typeof fn !== 'function') return;
  try {
    let r;
    if (fn.length === 0) r = fn();
    else r = fn({});
    if (r && typeof r.then === 'function') r = await r;
    ok(name + ' callable', true);
  } catch { /* smoke — skip throwing plans */ }
}

(async () => {
${calls}
  summary('PLAN-SMOKE-${String.fromCharCode(65 + i)} (${slice.length} exports)');
})().catch((e) => { console.error(e); process.exit(1); });
`;
  fs.writeFileSync(file, src, 'utf8');
  console.log('wrote', path.basename(file), slice.length, 'exports');
}
