/* ============================================================
   VKTR TCO — i18n (language toggle) + DB-ready persistence store
   ------------------------------------------------------------
   LANGUAGE
   - LangContext drives the whole UI. lang ∈ {"id","en"}.
   - Bilingual term pairs: toggling swaps which term is
     PRIMARY (bold) vs SECONDARY (muted). Both stay visible.

   DATABASE (handover note for Code session)
   - VKTRStore is the SINGLE integration point for persistence.
     Today it reads/writes localStorage. Swap the bodies of
     load()/save() for your API/DB calls (e.g. Supabase, REST)
     and every screen stays connected automatically.
   ============================================================ */

const LangContext = React.createContext({ lang: "id", setLang: () => {} });
function useLang() { return React.useContext(LangContext); }

function tr(lang, en, id) { return lang === "en" ? (en ?? id) : (id ?? en); }

function Tr({ en, id }) { const { lang } = useLang(); return <>{tr(lang, en, id)}</>; }

/* ---- DB-ready persistence layer ---- */
const VKTRStore = {
  STATE_KEY: "vktr_state",
  STEP_KEY:  "vktr_step",
  LANG_KEY:  "vktr_lang",

  // TODO(handover): replace body with `await db.analyses.get(sessionId) ?? defaults`
  loadState(defaults) {
    try {
      const raw    = localStorage.getItem(this.STATE_KEY);
      const stored = raw ? JSON.parse(raw) : {};
      // Discard stale state if schema version changed
      if (stored._schemaVersion !== window.SCHEMA_VERSION) {
        return { ...defaults };
      }
      return { ...defaults, ...stored };
    } catch {
      return { ...defaults };
    }
  },

  // TODO(handover): replace body with `await db.analyses.upsert(sessionId, state)` (debounce 800 ms)
  saveState(state) {
    try {
      localStorage.setItem(this.STATE_KEY, JSON.stringify({
        ...state,
        _schemaVersion: window.SCHEMA_VERSION,
      }));
    } catch (e) {}
  },

  clearState() {
    try { localStorage.removeItem(this.STATE_KEY); } catch (e) {}
  },

  // TODO(handover): wire to DB
  loadStep() { const n = Number(localStorage.getItem(this.STEP_KEY)); return isNaN(n) ? 0 : Math.max(0, Math.min(5, n)); },
  saveStep(n) { try { localStorage.setItem(this.STEP_KEY, n); } catch (e) {} },

  loadLang() { return localStorage.getItem(this.LANG_KEY) || "id"; },
  saveLang(l) { try { localStorage.setItem(this.LANG_KEY, l); } catch (e) {} },
};

Object.assign(window, { LangContext, useLang, tr, Tr, VKTRStore });
