// RangerHQ Tuner — Quick Stations preference helpers (v0.5.3).
//
// The user picks which SomaFM channels appear in the Quick Stations chip
// row on the New Tab Page. Stored in chrome.storage.local under
// `tuner.quickStations` as an array of SomaFM short ids
// (e.g. ['groovesalad', 'defcon', ...]). If the key is missing, the
// DEFAULT_QUICK_IDS below are used — a tidy 8 that wraps to 2 rows on
// most viewports.
//
// Cross-surface sync: NewTab's `chrome.storage.onChanged` listener picks
// up changes so toggling a checkbox in Options re-renders the chip row
// instantly without a reload.

export const QUICK_STATIONS_KEY = 'tuner.quickStations';

// 8 curated defaults — the same set Tuner v0.4.0 shipped with. Chosen
// for genre breadth (chill / ambient / indie / lounge / space / vocal /
// ambient / electronic) and to fit a tidy 2-row chip layout.
export const DEFAULT_QUICK_IDS = Object.freeze([
  'groovesalad',
  'dronezone',
  'indiepop',
  'secretagent',
  'spacestation',
  'lush',
  'deepspaceone',
  'fluid',
]);

function storage() {
  if (typeof chrome === 'undefined') return null;
  if (!chrome.storage || !chrome.storage.local) return null;
  return chrome.storage.local;
}

/** Read the user's chosen quick-station list, falling back to defaults. */
export async function getQuickStations() {
  const s = storage();
  if (!s) return [...DEFAULT_QUICK_IDS];
  const o = await s.get(QUICK_STATIONS_KEY);
  const v = o[QUICK_STATIONS_KEY];
  return Array.isArray(v) ? v.filter(x => typeof x === 'string') : [...DEFAULT_QUICK_IDS];
}

/** Persist the user's chosen quick-station list. Empty array = no quick chips. */
export async function setQuickStations(ids) {
  const s = storage();
  if (!s) return;
  const arr = Array.isArray(ids) ? ids.filter(x => typeof x === 'string') : [];
  await s.set({ [QUICK_STATIONS_KEY]: arr });
}

/** Wipe the preference so the default-8 is used again. */
export async function resetQuickStations() {
  const s = storage();
  if (!s) return;
  await s.remove(QUICK_STATIONS_KEY);
}
