import { useEffect, useState } from 'react';
import { toggleSaved } from './domain';
import { readSaved, writeSaved } from './storage';

function initialSaved() {
  try { return readSaved(window.localStorage); }
  catch { return { ids: [], warning: 'Storage is unavailable. You can still use this tab.' }; }
}
export function useSavedEvents() {
  // Reading does not mutate storage, so development Strict Mode may repeat it safely.
  const [initial] = useState(initialSaved);
  const [saved, setSaved] = useState({ ids: initial.ids, changed: false });
  const [writeWarning, setWriteWarning] = useState('');
  useEffect(() => {
    // Never overwrite unreadable data merely by mounting the page.
    // An explicit save/unsave authorizes replacing the current local preference.
    if (!saved.changed) return;
    try { setWriteWarning(writeSaved(window.localStorage, saved.ids)); }
    catch { setWriteWarning('Storage is unavailable. Changes will last only in this tab.'); }
  }, [saved]);
  return {
    savedIds: saved.ids,
    warning: saved.changed ? writeWarning : initial.warning,
    clear: () => setSaved({ ids: [], changed: true }),
    toggle: (id: string) => setSaved(previous => ({
      ids: toggleSaved(previous.ids, id), changed: true,
    })),
  };
}
