/* =====================================================================
 * Préférences locales (localStorage) et reprise des anciennes données.
 * Les comptes et les données métier sont enregistrés sur le serveur.
 * ===================================================================== */

const STORAGE_PREFIX = 'sapmanager.v1.';
const LEGACY_KEYS = ['users', 'session', 'currentUser', 'bilans', 'jsp', 'jspYears', 'jspStock', 'jspSeedVersion', 'settings'];

function loadStore(key, fallback) {
  const resolve = () => (typeof fallback === 'function' ? fallback() : fallback);
  try {
    const raw = localStorage.getItem(STORAGE_PREFIX + key);
    return raw === null ? resolve() : JSON.parse(raw);
  } catch (err) {
    console.warn(`Lecture localStorage impossible pour "${key}"`, err);
    return resolve();
  }
}

function saveStore(key, value) {
  try {
    localStorage.setItem(STORAGE_PREFIX + key, JSON.stringify(value));
  } catch (err) {
    console.error(`Écriture localStorage impossible pour "${key}"`, err);
  }
}

/** useState synchronisé avec le localStorage (préférences d'affichage uniquement). */
function usePersistentState(key, fallback) {
  const [state, setState] = useState(() => loadStore(key, fallback));
  useEffect(() => {
    saveStore(key, state);
  }, [key, state]);
  return [state, setState];
}

/** Données de l'ancienne version (stockées dans ce navigateur), ou null. */
function readLegacyData() {
  const read = (k) => loadStore(k, null);
  const data = {
    bilans: read('bilans'),
    jsp: read('jsp'),
    stock: read('jspStock'),
    jspYears: read('jspYears'),
    settings: read('settings'),
    users: read('users'),
    session: read('session'),
  };
  if (!Array.isArray(data.bilans) && !Array.isArray(data.jsp) && !Array.isArray(data.stock)) return null;
  return data;
}

function clearLegacyData() {
  LEGACY_KEYS.forEach((k) => localStorage.removeItem(STORAGE_PREFIX + k));
}

/** Profils de comptes (sans mot de passe) à reprendre depuis l'ancienne version. */
function legacyUserProfiles(legacy) {
  const pick = (u) => ({
    identifiant: u.identifiant,
    nom: u.nom,
    prenom: u.prenom,
    grade: u.grade,
    email: u.email,
    role: u.role,
    access: u.access,
    actif: u.actif,
  });
  const users = Array.isArray(legacy.users) ? legacy.users.filter((u) => u && u.identifiant) : [];
  const me = users.find((u) => u.id === legacy.session && u.role === 'admin');
  return { adminProfile: me ? pick(me) : null, users: users.filter((u) => u !== me).map(pick) };
}
