// 10x Newsletter - dynamic issue loader

const ISSUE_API_URL = "/api/issues";

function withCacheBust(url) {
  const separator = url.includes("?") ? "&" : "?";
  return `${url}${separator}t=${Date.now()}`;
}

async function fetchJson(url) {
  const response = await fetch(withCacheBust(url), { cache: "no-store" });
  if (!response.ok) {
    throw new Error(`Could not load ${url}: ${response.status}`);
  }
  return response.json();
}

function normalizeIssues(issues) {
  return issues
    .map((issue) => ({
      ...issue,
      items: Array.isArray(issue.items) ? issue.items : [],
    }))
    .sort((a, b) => {
      const byNumber = Number(b.number || 0) - Number(a.number || 0);
      if (byNumber !== 0) return byNumber;
      return String(b.iso || "").localeCompare(String(a.iso || ""));
    });
}

async function loadIssues() {
  const payload = await fetchJson(ISSUE_API_URL);
  const issues = Array.isArray(payload.issues) ? payload.issues : [];
  return normalizeIssues(issues);
}

window.loadIssues = loadIssues;
