// generate-sitemap.js
// Run with: node generate-sitemap.js
// Fetches all active listings from Supabase and writes sitemap.xml

const SUPABASE_URL = "https://clkizksbvxjkoatdajgd.supabase.co";
const SUPABASE_ANON = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImNsa2l6a3Nidnhqa29hdGRhamdkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ2ODAyMDUsImV4cCI6MjA3MDI1NjIwNX0.m3wd6UAuqxa7BpcQof9mmzd8zdsmadwGDO0x7-nyBjI";
const SITE_BASE = "https://hemlinemarket.com";

async function fetchListings() {
  const url = `${SUPABASE_URL}/rest/v1/listings?select=id,title,updated_at&status=eq.active&order=updated_at.desc`;
  const res = await fetch(url, {
    headers: {
      "apikey": SUPABASE_ANON,
      "Authorization": `Bearer ${SUPABASE_ANON}`
    }
  });
  if (!res.ok) throw new Error(`Supabase error: ${res.status} ${await res.text()}`);
  return res.json();
}

function toSitemapDate(dateStr) {
  return new Date(dateStr).toISOString().split("T")[0];
}

async function generateSitemap() {
  console.log("Fetching listings from Supabase...");
  const listings = await fetchListings();
  console.log(`Found ${listings.length} active listings.`);

  const staticPages = [
    { url: "/", priority: "1.0", changefreq: "daily" },
    { url: "/browse.html", priority: "0.9", changefreq: "daily" },
    { url: "/about.html", priority: "0.5", changefreq: "monthly" },
    { url: "/how.html", priority: "0.6", changefreq: "monthly" },
    { url: "/threadtalk.html", priority: "0.7", changefreq: "weekly" },
  ];

  const today = new Date().toISOString().split("T")[0];

  let xml = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
`;

  // Static pages
  for (const page of staticPages) {
    xml += `  <url>
    <loc>${SITE_BASE}${page.url}</loc>
    <lastmod>${today}</lastmod>
    <changefreq>${page.changefreq}</changefreq>
    <priority>${page.priority}</priority>
  </url>
`;
  }

  // Listing pages
  for (const listing of listings) {
    const lastmod = listing.updated_at ? toSitemapDate(listing.updated_at) : today;
    xml += `  <url>
    <loc>${SITE_BASE}/listing.html?id=${encodeURIComponent(listing.id)}</loc>
    <lastmod>${lastmod}</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
  </url>
`;
  }

  xml += `</urlset>`;

  const fs = await import("fs");
  fs.writeFileSync("sitemap.xml", xml);
  console.log(`sitemap.xml written with ${listings.length} listings + ${staticPages.length} static pages.`);
}

generateSitemap().catch(console.error);
