export type EliTabelaColunasConfig = {
  /** Rotulos das colunas visiveis (em ordem). */
  visiveis: string[];
  /** Rotulos das colunas invisiveis. */
  invisiveis: string[];
};

const STORAGE_PREFIX = "eli:tabela";

export function storageKeyColunas(nomeTabela: string) {
  return `${STORAGE_PREFIX}:${nomeTabela}:colunas`;
}

function normalizarConfig(valor: unknown): EliTabelaColunasConfig {
  if (!valor || typeof valor !== "object") {
    return { visiveis: [], invisiveis: [] };
  }

  const v = valor as any;
  const visiveis = Array.isArray(v.visiveis) ? v.visiveis.filter((x: any) => typeof x === "string") : [];
  const invisiveis = Array.isArray(v.invisiveis) ? v.invisiveis.filter((x: any) => typeof x === "string") : [];
  return { visiveis, invisiveis };
}

export function carregarConfigColunas(nomeTabela: string): EliTabelaColunasConfig {
  try {
    const raw = window.localStorage.getItem(storageKeyColunas(nomeTabela));
    if (!raw) return { visiveis: [], invisiveis: [] };
    return normalizarConfig(JSON.parse(raw));
  } catch {
    return { visiveis: [], invisiveis: [] };
  }
}

export function salvarConfigColunas(nomeTabela: string, config: EliTabelaColunasConfig) {
  try {
    window.localStorage.setItem(storageKeyColunas(nomeTabela), JSON.stringify(normalizarConfig(config)));
  } catch {
    // ignore
  }
}

export function limparConfigColunas(nomeTabela: string) {
  try {
    window.localStorage.removeItem(storageKeyColunas(nomeTabela));
  } catch {
    // ignore
  }
}
