// พระราชบัญญัติ และ พระราชกฤษฎีกา

const { execSync } = require("child_process");
const cheerio = require("cheerio");
const fs = require("fs");
const path = require("path");

const BASE = "https://ladsawai.go.th";
const OUT = path.join(process.cwd(), "พระราชบัญญัติ และ พระราชกฤษฎีกา");
fs.mkdirSync(OUT, { recursive: true });

function curlHtml(url) {
  return execSync(
    `curl -L -s "${url}" -H "User-Agent: Mozilla/5.0" -H "Accept-Language: th-TH,th;q=0.9"`,
    { encoding: "utf8", maxBuffer: 30 * 1024 * 1024 }
  );
}

function absUrl(href) {
  if (!href) return null;
  if (href.startsWith("http")) return href; // ลิงก์นอกโดเมน
  if (href.startsWith("/")) return BASE + href; // /public/...
  return BASE + "/" + href; // public/...
}

function scrapeLawMenu(menuId) {
  const url = `${BASE}/rss/data/law/menu/${menuId}`;
  const html = curlHtml(url);

  // debug
  fs.writeFileSync(path.join(OUT, `debug-menu-${menuId}.html`), html, "utf8");

  const $ = cheerio.load(html);
  const items = [];

  // ในรูปอยู่ใน table > tbody > tr และข้อมูลอยู่ที่ td.law-topic
  $("table tbody tr").each((_, tr) => {
    const tds = $(tr).find("td.law-topic");
    if (tds.length < 2) return;

    // ✅ ช่องที่ 2 คือข้อมูลจริง
    const td = tds.eq(1);

    // title ที่ถูกต้องมักอยู่ใน <a> ตัวที่เป็นข้อความยาว (มักเป็นตัวสุดท้าย)
    const title = td.find("a[href]").last().text().replace(/\s+/g, " ").trim();
    if (!title || title === "-") return;

    // เก็บ link ทุกตัวใน td (มีทั้ง read + download)
    const links = [];
    td.find("a[href]").each((_, a) => {
      const href = $(a).attr("href");
      const text = $(a).text().replace(/\s+/g, " ").trim();
      links.push({
        text: text || null,
        href: absUrl(href),
      });
    });

    const detail =
      td
        .clone()
        .find("a") // ตัด a ออก เหลือ text ล้วน
        .remove()
        .end()
        .text()
        .replace(/\s+/g, " ")
        .trim() || null;

    items.push({
      title,
      detail,
      links,
      sourceUrl: url,
    });
  });

  return { url, items };
}

(function main() {
  const menuId = 1220;

  const { url, items } = scrapeLawMenu(menuId);

  const out = {
    menuId,
    source: url,
    scrapedAt: new Date().toISOString(),
    totalItems: items.length,
    items,
  };

  const outJson = path.join(OUT, `menu-${menuId}-all.json`);
  fs.writeFileSync(outJson, JSON.stringify(out, null, 2), "utf8");

  console.log("✅ Saved:", outJson);
  console.log("✅ Items:", items.length);
})();
