import { existsSync, readFileSync } from 'node:fs';
import { join, resolve } from 'node:path';

const root = resolve(import.meta.dirname, '..');
const failures = [];
const assert = (condition, message) => { if (!condition) failures.push(message); };
const read = path => readFileSync(join(root, path), 'utf8');

const files = [
  'UPDATE_VENDOO.bat',
  'scripts/updater/Vendoo.Updater.Preflight.ps1',
  'scripts/update-vendoo-gui.ps1',
  'scripts/updater/Vendoo.Updater.UI.ps1',
  'scripts/updater/Vendoo.Updater.Host.ps1',
  'scripts/updater/Vendoo.Updater.Worker34.ps1',
];
for (const file of files) assert(existsSync(join(root, file)), `Updater-Startdatei fehlt: ${file}`);

if (existsSync(join(root, 'UPDATE_VENDOO.bat'))) {
  const starter = read('UPDATE_VENDOO.bat');
  assert(starter.includes('Production Updater 3.4 preflight'), 'Root-Starter meldet nicht Updater 3.4.');
  assert(starter.includes('Vendoo.Updater.Preflight.ps1'), 'Root-Starter startet den Preflight nicht.');
  assert(!starter.includes('Production Updater 3.3'), 'Root-Starter enthält noch die alte 3.3-Bezeichnung.');
}

if (existsSync(join(root, 'scripts/updater/Vendoo.Updater.Preflight.ps1'))) {
  const preflight = read('scripts/updater/Vendoo.Updater.Preflight.ps1');
  assert(preflight.includes("$UpdaterVersion = '3.4.0'"), 'Preflight meldet nicht Version 3.4.0.');
  assert(preflight.includes('Vendoo.Updater.Worker34.ps1'), 'Preflight prüft Worker34 nicht.');
  assert(!preflight.includes("Vendoo.Updater.Worker.ps1'"), 'Preflight verlangt weiterhin den entfernten Worker 3.3.');
}

if (existsSync(join(root, 'scripts/update-vendoo-gui.ps1'))) {
  assert(read('scripts/update-vendoo-gui.ps1').includes('Vendoo.Updater.UI.ps1'), 'GUI-Bootstrap startet die Updater-UI nicht.');
}

if (existsSync(join(root, 'scripts/updater/Vendoo.Updater.UI.ps1'))) {
  const ui = read('scripts/updater/Vendoo.Updater.UI.ps1');
  assert(ui.includes("$UpdaterVersion = '3.4.0'"), 'UI meldet nicht Version 3.4.0.');
  assert(ui.includes('Vendoo.Updater.Host.ps1'), 'UI startet den Host nicht.');
  assert(ui.includes('Vendoo.Updater.Worker34.ps1'), 'UI übergibt Worker34 nicht an den Host.');
  assert(!ui.includes("Vendoo.Updater.Worker.ps1'"), 'UI verweist weiterhin auf den entfernten Worker 3.3.');
}

if (existsSync(join(root, 'scripts/updater/Vendoo.Updater.Host.ps1'))) {
  const host = read('scripts/updater/Vendoo.Updater.Host.ps1');
  assert(host.includes("$UpdaterVersion = '3.4.0'"), 'Host meldet nicht Version 3.4.0.');
  assert(host.includes('[System.Management.Automation.Language.Parser]::ParseFile'), 'Host parst den Worker nicht vor der Ausführung.');
}

if (existsSync(join(root, 'scripts/updater/Vendoo.Updater.Worker34.ps1'))) {
  assert(read('scripts/updater/Vendoo.Updater.Worker34.ps1').includes("$UpdaterVersion='3.4.0'"), 'Worker34 meldet nicht Version 3.4.0.');
}

if (failures.length) {
  console.error(`Updater-3.4-Startketten-Gate fehlgeschlagen (${failures.length})`);
  failures.forEach(failure => console.error(`- ${failure}`));
  process.exit(1);
}
console.log('Updater-3.4-Startketten-Gate erfolgreich: Root-Starter, Preflight, UI, Host und Worker34 sind konsistent verdrahtet.');
