// Render-Probe: laesst renderM15 + renderBrk gegen ein Minimal-DOM laufen.
//
// ⚠⚠ WARUM ES DAS GIBT (2026-08-19): `node --check` prueft nur die SYNTAX. Ein
//   ReferenceError (falsche Variable im falschen Scope) ist syntaktisch
//   einwandfrei und faellt erst im Browser auf - dort bricht er aber den
//   GESAMTEN Render ab: alles ab der Fehlerstelle bleibt auf "—", und die
//   danach gerufenen Renderer laufen gar nicht mehr. Real passiert: die
//   RSI-Zeile griff in `renderM15(s)` auf `d.market` zu; das Dashboard zeigte
//   sechs leere Zeilen und eine komplett leere Breakout-Karte.
//   Python hat dafuer `ruff F821` - fuer JS gab es nichts Vergleichbares.
//
// Aufruf:  node tools/render_check.mjs <snapshot.json>
//   Snapshot holen:  curl -s http://127.0.0.1:8000/api/snapshot > snap.json
import fs from "fs";
const snap = JSON.parse(fs.readFileSync(process.argv[2], "utf-8"));
const src = fs.readFileSync("web/app.js", "utf-8");
const store = {};
const mk = (id) => ({ id, set textContent(v){ store[id]=v; }, get textContent(){return store[id]||"";},
  set className(v){}, get className(){return "";}, classList:{add(){},remove(){},toggle(){}},
  style:{}, value:"", title:"", addEventListener(){}, blur(){}, focus(){} });
const cache = {};
global.document = { getElementById: (id) => (cache[id] ||= mk(id)),
  querySelectorAll: () => [], querySelector: () => null, addEventListener(){},
  get activeElement(){return null;}, createElement: () => mk("_") };
const m = src.match(/function renderM15\([\s\S]*?\n\}/);
const b = src.match(/function renderBrk\([\s\S]*?\n\}/);
const helfer = 'const _F=document.createElement("span");' +
  'const $=(id)=>document.getElementById(id)||_F; const $streng=(id)=>document.getElementById(id);';
const fn = new Function("snapshot", helfer + "\n" + m[0] + "\n" + (b?b[0]:"function renderBrk(){}") +
  "\nrenderM15(snapshot.m15_setup, snapshot); renderBrk(snapshot);");
try { fn(snap); console.log("  ✅ renderM15 + renderBrk laufen OHNE Exception durch"); }
catch (e) { console.log("  ❌ EXCEPTION: " + e.message); process.exit(1); }
for (const k of ["m15-rsi","m15-m5","m15-motor","brk-pos","brk-state"])
  console.log("   " + k.padEnd(12) + " = " + (store[k] || "(leer)"));
