// CABLE TRAMPA: parsearOpciones vive canonica en packages/shared/src/opciones.ts
// y el cerebrito lleva una copia en src/comanda.ts (su exe no importa fuera de
// su src/). Este test revienta si alguien edita UNA sola de las dos copias.
// Correr: node test/test_copia_opciones.mjs
import { readFileSync } from 'node:fs';
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';

const AQUI = dirname(fileURLToPath(import.meta.url));
const CANONICA = join(AQUI, '..', '..', '..', 'packages', 'shared', 'src', 'opciones.ts');
const COPIA = join(AQUI, '..', 'src', 'comanda.ts');

// Saca SOLO el cuerpo de la funcion (desde su firma hasta la llave de cierre en
// columna 0), sin comentarios previos ni finales de linea de Windows.
function cuerpo(ruta) {
  const texto = readFileSync(ruta, 'utf8').replace(/\r\n/g, '\n');
  const m = texto.match(/export function parsearOpciones[\s\S]*?\n\}/);
  if (!m) throw new Error(`No encontre parsearOpciones en ${ruta}`);
  return m[0];
}

const a = cuerpo(CANONICA);
const b = cuerpo(COPIA);

if (a !== b) {
  console.error('X Las copias de parsearOpciones DIVERGIERON.');
  console.error('  Canonica: packages/shared/src/opciones.ts');
  console.error('  Copia:    apps/cerebrito/src/comanda.ts');
  console.error('  Edita las DOS igualitas (el exe no puede importar shared).');
  const la = a.split('\n');
  const lb = b.split('\n');
  for (let i = 0; i < Math.max(la.length, lb.length); i++) {
    if (la[i] !== lb[i]) {
      console.error(`  Primera diferencia (linea ${i + 1} de la funcion):`);
      console.error(`    canonica: ${la[i] ?? '(no existe)'}`);
      console.error(`    copia:    ${lb[i] ?? '(no existe)'}`);
      break;
    }
  }
  process.exit(1);
}

console.log('OK parsearOpciones: canonica y copia del cerebrito son identicas.');
