#!/usr/bin/env python3
"""DMark: ukur tampilan nyata tiap judul di beranda (ukuran, berat, warna, latar) supaya bisa dipertahankan."""
import asyncio, json


async def main():
    from playwright.async_api import async_playwright
    async with async_playwright() as pw:
        br = await pw.chromium.launch()
        hal = await br.new_page(viewport={"width": 1440, "height": 1000})
        await hal.goto("https://www.dmark.id/", wait_until="domcontentloaded", timeout=120000)
        await hal.wait_for_timeout(6000)
        data = await hal.evaluate("""
        () => {
          const keluar = [];
          document.querySelectorAll('h1,h2,h3,h4,h5,h6').forEach(el => {
            const cs = getComputedStyle(el);
            // cari warna latar efektif dengan menelusuri ke atas
            let bg = 'rgba(0, 0, 0, 0)', p = el;
            while (p && bg === 'rgba(0, 0, 0, 0)') {
              const c = getComputedStyle(p).backgroundColor;
              if (c && c !== 'rgba(0, 0, 0, 0)' && c !== 'transparent') bg = c;
              p = p.parentElement;
            }
            const r = el.getBoundingClientRect();
            keluar.push({
              tag: el.tagName.toLowerCase(),
              text: (el.innerText || '').replace(/\\s+/g, ' ').trim().slice(0, 56),
              size: cs.fontSize, weight: cs.fontWeight, lh: cs.lineHeight,
              color: cs.color, bg: bg, align: cs.textAlign,
              spectraId: el.getAttribute('data-spectra-id') || ''
            });
          });
          return keluar;
        }""")
        print(f"judul terukur: {len(data)}")
        for i, d in enumerate(data, 1):
            print(f"   {i:>2}. <{d['tag']}> {d['text'][:46]:<48} {d['size']:>7} / {d['weight']:>4} | "
                  f"warna {d['color']:<22} latar {d['bg']:<22} {d['align']}")
        # tautan tanpa nama
        kosong = await hal.evaluate("""
        () => Array.from(document.querySelectorAll('a')).filter(a => !(a.innerText || '').trim()
             && !a.getAttribute('aria-label') && !a.querySelector('img[alt]:not([alt=""])'))
             .map(a => ({href: a.getAttribute('href'), cls: a.className.slice(0, 60),
                         sisi: a.outerHTML.slice(0, 160), spectraId: a.getAttribute('data-spectra-id')}))""")
        print(f"\ntautan tanpa keterangan: {len(kosong)}")
        for k in kosong:
            print(f"   href={k['href']} | spectra={k['spectraId']} | {k['sisi'][:120]}")
        json.dump({"judul": data, "tautan_kosong": kosong},
                  open("/home/mantapman/.hermes/profiles/atun/workspace/drafts/dmark_tampilan.json", "w"), indent=1, ensure_ascii=False)
        await br.close()


asyncio.run(main())
