import { ref, watch, type Ref } from 'vue';

// Ref réactive persistée en localStorage : lue au démarrage (défaut si absente ou corrompue),
// réécrite à chaque changement. Gardée par try/catch, donc utilisable sans localStorage
// (tests en environnement node, navigation privée, quota dépassé).
export function persistedRef<T>(key: string, initial: T): Ref<T> {
  let start = initial;
  try {
    const raw = localStorage.getItem(key);
    if (raw != null) start = JSON.parse(raw) as T;
  } catch {
    /* localStorage indisponible / JSON corrompu : on garde le défaut */
  }
  const r = ref(start) as Ref<T>;
  watch(r, (v) => {
    try {
      localStorage.setItem(key, JSON.stringify(v));
    } catch {
      /* quota / mode privé : silencieux */
    }
  });
  return r;
}
