/* localStorage / sessionStorage helpers
 * window.usePersistedState — React hook，state 自動同步到 localStorage
 * window.Storage = { get, set, remove } — 普通 key/value 存取（含 JSON 編解碼）
 *
 * Key 命名規範：一律以 "twstock." 開頭，避免與其他應用衝突
 */

const PREFIX = "twstock.";

function safeGet(key) {
  try {
    const raw = localStorage.getItem(PREFIX + key);
    return raw == null ? undefined : JSON.parse(raw);
  } catch (e) {
    console.warn("[storage] get failed", key, e);
    return undefined;
  }
}

function safeSet(key, value) {
  try {
    localStorage.setItem(PREFIX + key, JSON.stringify(value));
    return true;
  } catch (e) {
    console.warn("[storage] set failed", key, e);
    return false;
  }
}

function safeRemove(key) {
  try {
    localStorage.removeItem(PREFIX + key);
  } catch (e) {}
}

function usePersistedState(key, defaultValue) {
  const [value, setValue] = React.useState(() => {
    const stored = safeGet(key);
    return stored === undefined ? defaultValue : stored;
  });

  React.useEffect(() => {
    safeSet(key, value);
  }, [key, value]);

  return [value, setValue];
}

/* 注意：window.Storage 是瀏覽器內建類別（localStorage / sessionStorage 的 prototype），
 * 不可覆寫，否則會破壞 instanceof 判斷。改用 window.TWStorage 命名空間。 */
window.TWStorage = { get: safeGet, set: safeSet, remove: safeRemove };
window.usePersistedState = usePersistedState;
