export const SAVED_KEY = 'harbor-together:react-course:saved:v1';
export type SavedRead = { ids: string[]; warning: string };

export function parseSavedIds(value: unknown): string[] {
  if (!Array.isArray(value) || !value.every((id: unknown) =>
    typeof id === 'string' && /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id))) {
    throw new Error('Saved IDs must be an array of valid ID strings.');
  }
  return [...new Set(value)];
}
export function readSaved(storage: Pick<Storage, 'getItem'>): SavedRead {
  try {
    const raw = storage.getItem(SAVED_KEY);
    if (raw === null) return { ids: [], warning: '' };
    const value: unknown = JSON.parse(raw);
    return { ids: parseSavedIds(value), warning: '' };
  } catch {
    return { ids: [], warning: 'Saved events could not be read. You can still use this tab.' };
  }
}
export function writeSaved(storage: Pick<Storage, 'setItem'>, ids: readonly string[]): string {
  try {
    storage.setItem(SAVED_KEY, JSON.stringify(ids));
    return '';
  } catch {
    return 'Saved events could not be stored. Changes will last only in this tab.';
  }
}
