/**
 * store.js — Estado global de la aplicación.
 * Sustituye las 34 variables globales de varapp.js.
 *
 * ORIGEN v1: variables sueltas (mainMenu, pC, arrPdf, hard, etc.) en scope global.
 * PROBLEMA: cualquier fichero podía sobrescribirlas accidentalmente.
 *           localStorage se parseaba en cada llamada (sin caché en memoria).
 */

// ─── Caché de datos maestros (se cargan una sola vez desde localStorage) ─────
let _cache = {
  categorias:    null,
  subcategorias: null,
  genericos:     null,
  catalogo:      null,
  traducciones:  null,
};

function _load(key) {
  if (_cache[key]) return _cache[key];
  const raw = localStorage.getItem(key);
  if (!raw) throw new Error(`[store] "${key}" no existe en localStorage`);
  _cache[key] = JSON.parse(raw);
  return _cache[key];
}

export function invalidateCache(key) {
  if (key) { _cache[key] = null; }
  else      { Object.keys(_cache).forEach(k => (_cache[k] = null)); }
}

export function getCategorias()    { return _load('categorias'); }
export function getSubcategorias() { return _load('subcategorias'); }
export function getGenericos()     { return _load('genericos'); }
export function getCatalogo()      { return _load('catalogo'); }

// ─── Estado de sesión del fisio ───────────────────────────────────────────────
const _session = {
  username: () => localStorage.getItem('username') ?? '',
  hard:     '',   // 'WPD' | 'AMT' | 'UPT'
  isPC:     false,
};

export const session = {
  getUsername: () => _session.username(),
  getHard:     () => _session.hard,
  isPC:        () => _session.isPC,
  setHard(hard) {
    _session.hard  = hard;
    _session.isPC  = (hard === 'WPD');
    localStorage.setItem('hard', hard);
    localStorage.setItem('deviceAndroid', String(!_session.isPC));
  },
};

// ─── Lista de ejercicios del fisio (mainMenu en v1) ──────────────────────────
let _mainMenu = [];

export const exerciseStore = {
  set(list)       { _mainMenu = list; },
  get()           { return _mainMenu; },
  getAt(i)        { return _mainMenu[i]; },
  count()         { return _mainMenu.length; },
  findByOrdenOri: (ordenOri) => _mainMenu.find(e => e.ordenOri === ordenOri),
};

// ─── Selección actual para PDF (arrPdf en v1) ────────────────────────────────
let _selection = [];

export const selection = {
  add(index)    { if (!_selection.includes(index)) _selection.push(index); },
  remove(index) { _selection = _selection.filter(i => i !== index); },
  toggle(index) { _selection.includes(index) ? selection.remove(index) : selection.add(index); },
  getAll()      { return [..._selection]; },
  clear()       { _selection = []; },
  count()       { return _selection.length; },
};
