// Shared treatment data — used by the Behandlungen section on the homepage
// and the Alle-Behandlungen subpage. Analogous to course-data.jsx.
//
// Datenquelle ist ausschließlich das Backend (/api/public/behandlungen).
// Die hier definierte Liste startet leer — synchron-Cache + Async-Fetch
// füllen sie. Wenn das Backend leer ist, bleibt sie leer und die
// Behandlungen-Section rendert nichts (kein Hardcoded-„Phantomangebot").
window.WB_BEHANDLUNGEN = [];
// Behandlungen haben eine EIGENE Kategorien-Taxonomie (nicht die
// Kurs-Kategorien!). Wird vom Backend mitgeliefert und hier gehalten.
window.WB_BEHANDLUNG_CATEGORIES = [];

// Unique list of individual women involved in treatments — used to populate
// the leader filter on the Alle-Behandlungen page. Split on " & " so multi-
// name strings like "Franziska Helmbrecht & Amelie Eck" become two entries.
const rebuildBehandlungLeaders = () => {
  const set = new Set();
  for (const b of window.WB_BEHANDLUNGEN) {
    for (const name of String(b.leader || '').split(/\s*&\s*/)) {
      const n = name.trim();
      if (n) set.add(n);
    }
  }
  window.WB_BEHANDLUNG_LEADERS = Array.from(set).sort((a, b) => a.localeCompare(b, 'de'));
};
rebuildBehandlungLeaders();

// Cache + Live-Fetch: synchron Cache anwenden, dann im Hintergrund refreshen.
// Cache-Key v3: Shape erweitert auf { items, categories } — v1/v2 (nur
// items, dazu evtl. Hardcoded-Fallback bzw. Kurs-Kategorien) sind ungültig.
const BH_CACHE_KEY = 'wb_behandlungen_cache_v3';
const BH_CACHE_MAX_AGE_MS = 1000 * 60 * 60 * 24 * 30;
const bhReadCache = () => {
  try {
    const raw = typeof localStorage !== 'undefined' ? localStorage.getItem(BH_CACHE_KEY) : null;
    if (!raw) return null;
    const p = JSON.parse(raw);
    if (!p || !p.ts || !p.data) return null;
    if (Date.now() - p.ts > BH_CACHE_MAX_AGE_MS) return null;
    return p.data; // { items, categories }
  } catch { return null; }
};
const bhWriteCache = (payload) => {
  try { if (typeof localStorage !== 'undefined') localStorage.setItem(BH_CACHE_KEY, JSON.stringify({ data: payload, ts: Date.now() })); } catch {}
};
const bhApplyData = (payload) => {
  if (!payload || !Array.isArray(payload.items)) return;
  // Bewusst auch leere Arrays anwenden — Backend ist die Single Source of
  // Truth, eine leere Antwort heißt „aktuell keine Behandlungen", nicht
  // „bitte Fallback zeigen".
  window.WB_BEHANDLUNGEN.length = 0;
  window.WB_BEHANDLUNGEN.push(...payload.items);
  window.WB_BEHANDLUNG_CATEGORIES.length = 0;
  window.WB_BEHANDLUNG_CATEGORIES.push(...(payload.categories ?? []));
  rebuildBehandlungLeaders();
};

// Synchron-Apply VOR React-Mount: erster Render zeigt schon den Cache.
(() => { const c = bhReadCache(); if (c) bhApplyData(c); })();

// Async-Fetch, dann Cache aktualisieren + globale Event-Dispatch zum Re-Render.
fetch('https://project-zd7wa.vercel.app/api/public/behandlungen')
  .then((r) => r.ok ? r.json() : null)
  .then((data) => {
    if (!data || !Array.isArray(data.items)) return;
    const payload = { items: data.items, categories: data.categories ?? [] };
    bhApplyData(payload);
    bhWriteCache(payload);
    window.dispatchEvent(new CustomEvent('wb-behandlungen-updated'));
  })
  .catch(() => {});
