/* global Tweaks defaults + protocol */
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "heroLayout": "split",
  "coverageStyle": "logo-cells",
  "keyInsightStyle": "single-stat",
  "dashboardDensity": "summary",
  "accentIntensity": "restrained"
}/*EDITMODE-END*/;

window.TWEAK_DEFAULTS = TWEAK_DEFAULTS;

/* Persistent state bus — components subscribe to changes */
const tweakListeners = new Set();
let tweakState = { ...TWEAK_DEFAULTS };

window.getTweaks = () => tweakState;
window.setTweak = (key, value) => {
  tweakState = { ...tweakState, [key]: value };
  tweakListeners.forEach(fn => fn(tweakState));
  try {
    window.parent.postMessage({ type: '__edit_mode_set_keys', edits: { [key]: value } }, '*');
  } catch (e) {}
};
window.subscribeTweaks = (fn) => {
  tweakListeners.add(fn);
  return () => tweakListeners.delete(fn);
};

/* React hook */
window.useTweaks = () => {
  const [t, setT] = React.useState(tweakState);
  React.useEffect(() => window.subscribeTweaks(setT), []);
  return t;
};

/* Edit-mode toggle handshake — register first, then announce */
(function () {
  let panelVisible = false;
  const panelListeners = new Set();
  window.subscribeTweakPanelVisibility = (fn) => {
    panelListeners.add(fn);
    fn(panelVisible);
    return () => panelListeners.delete(fn);
  };
  window.addEventListener('message', (e) => {
    const d = e.data;
    if (!d || typeof d !== 'object') return;
    if (d.type === '__activate_edit_mode') {
      panelVisible = true;
      panelListeners.forEach(fn => fn(true));
    } else if (d.type === '__deactivate_edit_mode') {
      panelVisible = false;
      panelListeners.forEach(fn => fn(false));
    }
  });
  try {
    window.parent.postMessage({ type: '__edit_mode_available' }, '*');
  } catch (e) {}
})();
