// Правило владельца (2026-07-29): у источников света подложка в glow-режиме
// всегда стандартная — индикатор включения это ПЯТНО; в остальных режимах
// горящий источник жёлтый, как греющая термоголовка. RGB лампы красит только
// пятно (и фолбэк цвета пульсации); окраска иконки/рамки убрана. Морф иконки
// остаётся везде. Розетка в glow-режиме остаётся жёлтой — она не источник.
import { launch, checkAll, finish } from './serve.mjs';
const { page, browser } = await launch();
const out = await page.evaluate(async () => {
  const o = {};
  const c = window.__card;
  const sr = () => c.shadowRoot || c.renderRoot;
  const setFill = async (mode) => {
    const cfg = JSON.parse(JSON.stringify(c._serverCfg));
    const f1 = cfg.spaces.find((s) => s.id === 'f1');
    f1.settings = { ...(f1.settings || {}), fill_mode: mode };
    c._serverCfg = cfg; c._cfgEpoch++; c._regSignature = '';
    c._maybeRebuildDevices(); c.requestUpdate(); await c.updateComplete;
    await new Promise((r) => setTimeout(r, 80));
  };
  const lamp = c._devices.find((x) => x.id === 'd_lamp');
  const kettle = c._devices.find((x) => x.id === 'd_kettle'); // розетка/чайник
  // зажигаем лампу с RGB и розетку
  c.hass = { ...c.hass, states: { ...c.hass.states,
    [lamp.primary]: { ...c.hass.states[lamp.primary], state: 'on',
      attributes: { ...(c.hass.states[lamp.primary]?.attributes || {}), rgb_color: [255, 120, 40] } },
    [kettle.primary]: { ...c.hass.states[kettle.primary], state: 'on' } } };
  const devEl = (id) => {
    // надёжнее по индексу в списке devs: ищем по позиции через _pos
    const d = c._devices.find((x) => x.id === id);
    const v = c._viewOr(c._baseVb());
    const p = c._pos(d);
    const left = (((p.x - v.x) / v.w) * 100).toFixed(0);
    return [...sr().querySelectorAll('.dev')].find((e) => Math.abs(parseFloat(e.style.left) - left) < 1.5);
  };

  // --- режим light: горящая RGB-лампа ЖЁЛТАЯ, без rgb-класса --------------
  await setFill('light');
  let le = devEl('d_lamp');
  o.litLampYellowInLightMode = !!le && le.classList.contains('on') && !le.classList.contains('rgb');
  o.morphInLightMode = le?.querySelector('ha-icon')?.getAttribute('icon')?.includes('lightbulb') ?? false;

  // --- режим glow: лампа ТЁМНАЯ (индикатор — пятно), розетка жёлтая -------
  await setFill('glow');
  le = devEl('d_lamp');
  const ke = devEl('d_kettle');
  o.litLampDarkInGlow = !!le && !le.classList.contains('on') && !le.classList.contains('rgb');
  o.glowSpotPresent = !!sr().querySelector('.stage svg radialGradient, .stage svg [id*=glow]');
  o.socketStaysYellowInGlow = !!ke && ke.classList.contains('on');
  o.morphInGlow = le?.querySelector('ha-icon')?.getAttribute('icon')?.includes('lightbulb') ?? false;

  // --- HP-1520-01: в редакторах, где glow-слой скрыт, индикатор возвращается
  // (лампа горит; в devices-редакторе слой рисуется — там лампа тёмная,
  // в plan-редакторе слоя нет — там класс on должен вернуться)
  c._setMode('devices'); c.requestUpdate(); await c.updateComplete;
  le = devEl('d_lamp');
  o.devicesEditorLampDark = !!le && !le.classList.contains('on');
  o.devicesEditorHasGlow = !!sr().querySelector('.stage svg radialGradient, .stage svg [id*=glow]');
  c._setMode('plan'); c.requestUpdate(); await c.updateComplete;
  // ИМЕННО лампа (mutation-проверка аудита HP-1521-01: розетка тоже on и
  // удовлетворяла бы поиску «любой .dev.on», пряча регресс самой лампы)
  le = devEl('d_lamp');
  o.planEditorLampYellow = !!le && le.classList.contains('on'); // слой скрыт — жёлтый вернулся
  o.planEditorKettleStillOn = !!devEl('d_kettle')?.classList.contains('on');
  o.planEditorNoGlow = !sr().querySelector('.stage svg radialGradient, .stage svg [id*=glow]');
  c._setMode('view'); c.requestUpdate(); await c.updateComplete;

  // --- выключенная лампа тёмная в обоих режимах ---------------------------
  c.hass = { ...c.hass, states: { ...c.hass.states,
    [lamp.primary]: { ...c.hass.states[lamp.primary], state: 'off' } } };
  c.requestUpdate(); await c.updateComplete;
  le = devEl('d_lamp');
  o.offLampDarkInGlow = !!le && !le.classList.contains('on');
  await setFill('light');
  le = devEl('d_lamp');
  o.offLampDarkInLightMode = !!le && !le.classList.contains('on');
  return o;
});
await finish(browser, checkAll(out));
