import { launch, checkAll, finish } from './serve.mjs';
const { page, browser } = await launch();
const res = await page.evaluate(async () => {
  const out = {};
  const c = window.__card;
  // счётчики вызовов тяжёлой геометрии
  let pairsCalls = 0, buildCalls = 0;
  const origPairs = c._computeOpenPairs.bind(c);
  c._computeOpenPairs = (...a) => { pairsCalls++; return origPairs(...a); };
  const origBuild = c._buildModel.bind(c);
  c._buildModel = (...a) => { buildCalls++; return origBuild(...a); };
  // открыть границу, чтобы pairs было что считать
  const sp = c._curSpaceCfg;
  const r1 = sp.rooms[0], r2 = sp.rooms[1];
  r1.open_to = [r2.id]; r2.open_to = [r1.id];
  c._saveConfig(); c.requestUpdate(); await c.updateComplete;
  pairsCalls = 0; buildCalls = 0;
  // 10 «пушей состояния» от HA без изменения конфига
  for (let i = 0; i < 10; i++) {
    c.hass = { ...c.hass, states: { ...c.hass.states } };
    await c.updateComplete;
  }
  out.pairsPerRender = pairsCalls;      // должно быть 0: кэш живёт между рендерами
  out.modelBuildsPer10Renders = buildCalls;
  // правка конфига обязана инвалидировать кэш
  const before = pairsCalls;
  const r3 = sp.rooms[2] || sp.rooms[0];
  r3.open_to = [r1.id]; r1.open_to = [r2.id, r3.id];
  c._saveConfig(); c.requestUpdate(); await c.updateComplete;
  out.invalidatesOnEdit = pairsCalls > before;
  // геометрия по-прежнему правильная: пунктир на месте
  out.dashesStillRendered = (c.shadowRoot || c.renderRoot).querySelectorAll('.openwall').length > 0;
  return out;
});
// значения зафиксированы прогоном на v1.43.1 и сверены с кодом (audit T1)
checkAll(res, {
  "pairsPerRender": 0,
  "modelBuildsPer10Renders": 0,
});
await finish(browser, res);
