#!/usr/bin/env node
// Ralph layout audit for the shotlog viewer (see skills/adom-shotlog-dev).
// Usage: CHROME=<chrome> node tools/ralph-check.cjs <viewer-url> [width] [dpr]
// PASS = outerHScroll:false AND outerVScroll:false AND off:[]
const puppeteer = require('/home/adom/project/node_modules/puppeteer-core');
(async()=>{
  const url = process.argv[2], W = +(process.argv[3]||360), DPR = +(process.argv[4]||1.5);
  const b = await puppeteer.launch({executablePath: process.env.CHROME, headless:'new',
    args:['--no-sandbox','--disable-gpu','--disable-dev-shm-usage']});
  const p = await b.newPage();
  await p.setViewport({width:W, height:701, deviceScaleFactor:DPR});
  await p.goto(url, {waitUntil:'networkidle2', timeout:25000}).catch(()=>{});
  await new Promise(r=>setTimeout(r,1800));
  const res = await p.evaluate(()=>{
    const de=document.documentElement, vw=de.clientWidth;
    const off=[...document.querySelectorAll('*')].map(el=>{const r=el.getBoundingClientRect();
      return {t:el.tagName+'.'+((''+el.className).split(' ')[0]||''), right:Math.round(r.right)};})
      .filter(x=>x.right>vw+1).sort((a,b)=>b.right-a.right).slice(0,10);
    return {vw, dpr:devicePixelRatio, outerHScroll: de.scrollWidth>de.clientWidth,
            outerVScroll: de.scrollHeight>de.clientHeight, off};
  });
  console.log(JSON.stringify(res));
  await b.close();
  process.exit((res.outerHScroll||res.outerVScroll||res.off.length)?1:0);
})().catch(e=>{console.error(String(e).slice(0,200));process.exit(2)});