#!/usr/bin/env python3
"""Capture (tangkapan layar) setiap penyebutan "Klinik DNI" pada halaman TSC.

Tidak mengubah apa pun. Tiap kemunculan diberi kotak merah, lalu difoto beserta konteksnya.
Jalankan dengan /usr/bin/python3 (playwright ada di sana).
"""
import os, re, sys

from playwright.sync_api import sync_playwright

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
OUT = f"{WS}/tsc_preview_klinikdni"
os.makedirs(OUT, exist_ok=True)

HALAMAN = {
    "tentang-kami": "https://www.theskincodeclinic.com/tentang-kami/",
    "artikel-aids": "https://www.theskincodeclinic.com/hari-aids-sedunia-7-cara-sederhana-tunjukkan-kepedulian-dan-hentikan-stigma/",
    "artikel-dokter-kelamin": "https://www.theskincodeclinic.com/6-tips-memilih-dokter-kelamin-wanita-terdekat-yang-nyaman-dan-rahasia-terjaga-di-klinik-dni-krian/",
    "artikel-top-klinik": "https://www.theskincodeclinic.com/top-klinik-dokter-kulit-krian-terpercaya-hasil-mulus-permanen-tanpa-risiko/",
}

JS_CARI = """
() => {
  const hasil = [];
  const pola = /klinik[\\s_-]*dni/i;
  const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
  let n;
  const dilihat = new Set();
  while (n = walker.nextNode()) {
    const t = (n.textContent || '').trim();
    if (!pola.test(t)) continue;
    let el = n.parentElement;
    if (!el) continue;
    const r = el.getBoundingClientRect();
    if (r.width < 40 || r.height < 10) continue;
    if (r.height > 500 || r.width > 1300) continue;      // terlalu besar, bukan blok teksnya
    const tanda = t.slice(0, 90);
    if (dilihat.has(tanda)) continue;                    // hindari duplikat
    dilihat.add(tanda);
    hasil.push({teks: t.slice(0, 200)});
    el.setAttribute('data-atun-tandai', '1');
  }
  return hasil;
}
"""

catatan = []
with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page(viewport={"width": 1280, "height": 900}, device_scale_factor=2)
    for nama, url in HALAMAN.items():
        print(f"\n=== {nama}: {url}")
        try:
            page.goto(url, wait_until="domcontentloaded", timeout=120000)
            page.wait_for_timeout(6000)
        except Exception as e:
            print("   gagal buka:", str(e)[:80])
            continue
        temuan = page.evaluate(JS_CARI)
        print(f"   kemunculan: {len(temuan)}")
        elems = page.query_selector_all("[data-atun-tandai='1']")
        for i, t in enumerate(temuan, 1):
            if i - 1 >= len(elems):
                break
            el = elems[i - 1]
            try:
                el.scroll_into_view_if_needed(timeout=15000)
                page.wait_for_timeout(400)
                el.evaluate("e => { e.style.outline = '4px solid #e11d48'; e.style.outlineOffset = '4px'; }")
                page.wait_for_timeout(250)
                berkas = f"{OUT}/{nama}_{i:02d}.png"
                page.screenshot(path=berkas)
                catatan.append({"halaman": nama, "url": url, "nomor": i, "teks": t["teks"],
                                "berkas": berkas})
                print(f"   ✅ {berkas}")
                el.evaluate("e => { e.style.outline = ''; e.style.outlineOffset = ''; }")
                el.evaluate("e => { e.removeAttribute('data-atun-tandai'); }")
            except Exception as e:
                print(f"   ⚠ {i}: {str(e)[:70]}")
        page.evaluate("""() => document.querySelectorAll('[data-atun-tandai]').forEach(e => { e.removeAttribute('data-atun-tandai'); e.style.outline = ''; })""")
    browser.close()

import json
json.dump(catatan, open(f"{OUT}/daftar.json", "w"), ensure_ascii=False, indent=1)
print(f"\ntotal tangkapan: {len(catatan)} → {OUT}")
