import { launch, checkAll, finish } from './serve.mjs';
const { page, browser } = await launch();
const res = await page.evaluate(async () => {
  const out = {};
  const c = window.__card;
  c._setMode('devices'); await c.updateComplete;
  const near = (a, b) => a && b && Math.abs(a.x - b.x) < 1e-6 && Math.abs(a.y - b.y) < 1e-6 && a.s === b.s;
  // подопытный: авто-устройство с сохранённой позицией
  const dev = c._devices.find((d) => !d.virtual && !d.marker && c._layout[d.id]);
  out.hasDev = !!dev;
  const pos0 = { ...c._layout[dev.id] };
  // 1) смена комнаты (та же space) → позиция не меняется
  const otherRoom = c._spaceModel(dev.space).rooms.find((r) => r.id && r.area && r.area !== dev.area);
  out.hasOtherRoom = !!otherRoom;
  c._openMarkerDialog(dev);
  c._markerDialog = { ...c._markerDialog, room: dev.space + '#' + otherRoom.area };
  await c._saveMarker(); await c.updateComplete;
  out.stayAfterRoomChange = near(c._layout[dev.id], pos0);
  // вернуть комнату назад
  c._openMarkerDialog(c._devices.find((d) => d.id === dev.id));
  c._markerDialog = { ...c._markerDialog, room: dev.space + '#' + dev.area };
  await c._saveMarker(); await c.updateComplete;
  // 2) смена привязки device -> entity (id меняется) → позиция мигрирует
  const freeEnt = Object.keys(c.hass.states).find((e) => e.startsWith('sensor.') &&
    !c._devices.some((d) => d.id === 'lg_' + e));
  out.hasFreeEnt = !!freeEnt;
  c._openMarkerDialog(c._devices.find((d) => d.id === dev.id));
  c._markerDialog = { ...c._markerDialog, binding: 'entity:' + freeEnt };
  await c._saveMarker(); await c.updateComplete;
  const newId = 'lg_' + freeEnt;
  out.migrated = near(c._layout[newId], pos0);
  out.oldGone = !c._layout[dev.id];
  // 3) новый виртуальный маркер по-прежнему центрируется в выбранной комнате
  c._openMarkerDialog();
  const room = c._spaceModel().rooms.find((r) => r.id && r.area);
  c._markerDialog = { ...c._markerDialog, name: 'Тест', binding: 'virtual', room: c._space + '#' + room.area };
  await c._saveMarker(); await c.updateComplete;
  const vid = c._serverCfg.markers.find((m) => m.name === 'Тест')?.id;
  const center = c._roomCenter(room);
  const vpos = c._layout[vid];
  out.newCentered = vpos && Math.abs(vpos.x * 1000 - center[0]) < 1 && Math.abs(vpos.y * 1000 - center[1]) < 1;
  return out;
});
checkAll(res);
await finish(browser, res);
