// PRUEBA DEL ARRANQUE CON WINDOWS (2026-07-29)
//
// Lo que se puede probar SIN tocar el registro de la maquina de verdad:
//   - El .vbs se genera con comillas DUPLICADAS estilo VBScript (la leccion
//     del Cerebrito: con escapes JSON el 800A0401 dejaba el programa sin
//     arrancar solo, roto de nacimiento y sin ruido).
//   - El marcador de "apagado a proposito" se pone y se quita.
//   - La compuerta esExe: en desarrollo/pruebas, asegurarArranque NO hace
//     nada de nada (ni icono, ni vbs, ni registro).
//
// Lo que NO se prueba aqui a proposito: reg add / reg delete (eso seria
// tocar el autoarranque real de la maquina donde corren las suites).
import { existsSync, mkdtempSync, readdirSync, rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { contenidoVbs, apagadoAProposito, marcarApagado, asegurarArranque } from '../dist/arranque.js';

let fallos = 0;
const check = (c, m) => {
  console.log((c ? '  OK  ' : '  XX  ') + m);
  if (!c) fallos++;
};

const dir = mkdtempSync(join(tmpdir(), 'fiscal-arranque-'));

try {
  console.log('\n== 1. El .vbs nace bien (comillas VBScript, no escapes JSON) ==');
  const vbs = contenidoVbs('"C:\\Program Files\\Estacion\\Estacion-Fiscal.exe"');
  check(vbs.includes('""C:\\Program Files\\Estacion\\Estacion-Fiscal.exe""'), 'las comillas van DUPLICADAS');
  check(!vbs.includes('\\"'), 'sin escapes JSON (\\") que revientan VBScript');
  check(vbs.includes(', 0, False'), 'arranca oculto (0) y sin esperar (False)');
  check(vbs.endsWith('\r\n'), 'termina en CRLF (archivo de Windows)');
  check(vbs.startsWith('CreateObject("Wscript.Shell").Run '), 'una sola linea de Wscript.Shell');

  console.log('\n== 2. El marcador de apagado a proposito ==');
  check(apagadoAProposito(dir) === false, 'una instalacion nueva no lo tiene');
  marcarApagado(dir, true);
  check(apagadoAProposito(dir) === true, 'apagarlo lo deja anotado');
  marcarApagado(dir, false);
  check(apagadoAProposito(dir) === false, 'volver a activarlo lo borra');
  marcarApagado(dir, false);
  check(apagadoAProposito(dir) === false, 'quitarlo dos veces no revienta');

  console.log('\n== 3. La compuerta esExe: en desarrollo no se toca NADA ==');
  await asegurarArranque({ base: dir, esExe: false, puerto: 8739, log: () => {} });
  check(!existsSync(join(dir, 'arrancar_oculto.vbs')), 'no se escribio ningun .vbs');
  const sobras = readdirSync(dir).filter((f) => f !== 'estado');
  check(sobras.length === 0, `la carpeta queda intacta (${sobras.length} sobras)`);

  console.log(fallos === 0 ? '\nTODO EN VERDE' : `\n${fallos} FALLOS`);
} catch (e) {
  console.error('\nREVENTO:', e);
  fallos++;
} finally {
  rmSync(dir, { recursive: true, force: true });
}
process.exit(fallos ? 1 : 0);
