// ============================================================
// WASIED · CMS store - live, persistent (localStorage), reactive
// Admin edits here flow to the public site immediately.
// ============================================================

const CMS_KEY = 'wasied_cms_v1';

function loadCMS() {
  try {
    const raw = localStorage.getItem(CMS_KEY);
    if (raw) return deepMerge(structuredClone(CMS), JSON.parse(raw));
  } catch (e) {}
  return structuredClone(CMS);
}

function deepMerge(base, override) {
  for (const k in override) {
    if (override[k] && typeof override[k] === 'object' && !Array.isArray(override[k]) && base[k]) {
      deepMerge(base[k], override[k]);
    } else {
      base[k] = override[k];
    }
  }
  return base;
}

let _cmsState = (typeof window !== 'undefined') ? loadCMS() : structuredClone(CMS);
const _cmsListeners = new Set();

function getCMS() { return _cmsState; }

function setCMS(updater) {
  _cmsState = typeof updater === 'function' ? updater(structuredClone(_cmsState)) : deepMerge(structuredClone(_cmsState), updater);
  try { localStorage.setItem(CMS_KEY, JSON.stringify(_cmsState)); } catch (e) {}
  _cmsListeners.forEach(fn => fn(_cmsState));
}

function resetCMS() {
  try { localStorage.removeItem(CMS_KEY); } catch (e) {}
  _cmsState = structuredClone(CMS);
  _cmsListeners.forEach(fn => fn(_cmsState));
}

function useCMS() {
  const [state, setState] = React.useState(_cmsState);
  React.useEffect(() => {
    const fn = (s) => setState({ ...s });
    _cmsListeners.add(fn);
    return () => _cmsListeners.delete(fn);
  }, []);
  return state;
}

Object.assign(window, { getCMS, setCMS, resetCMS, useCMS });
