/**
 * Utilitário seguro para leitura de dados do `localStorage` com parse JSON.
 *
 * Centraliza o padrão try/parse/validate usado em todos os serviços de storage
 * da aplicação, eliminando código duplicado em blockstorage, codestorage e
 * letramentoStorage.
 *
 * @module utils.localStorage
 */

/**
 * Lê e faz parse de um valor do `localStorage`, com validação opcional.
 *
 * Em caso de chave ausente retorna `null`.
 * Em caso de erro de parse ou validação falha, remove a chave corrompida
 * e retorna `null`.
 *
 * @template T
 * @param {string} key - Chave do `localStorage`
 * @param {((value: unknown) => boolean) | null} [validator=null] - Função que valida o valor parseado
 * @returns {T | null} Valor parseado e validado, ou `null`
 *
 * @example
 * const data = safeLocalGet('my-key', (v) => typeof v === 'string');
 */
export function safeLocalGet(key, validator = null) {
  try {
    const raw = localStorage.getItem(key);
    if (raw === null) return null;
    const parsed = JSON.parse(raw);
    if (validator !== null && !validator(parsed)) return null;
    return parsed;
  } catch {
    localStorage.removeItem(key);
    return null;
  }
}
