/**
 * Em qual conta da Spedy este servidor fala.
 *
 * A Spedy tem duas contas separadas — sandbox e produção —, cada uma com a sua
 * chave de titular e as suas empresas. O banco do Ktalogu é um só para o
 * servidor local e o de produção, então tudo que depende da conta (empresa
 * emissora, nota, crédito, compra, fila) carrega o ambiente, e cada servidor só
 * mexe no que é do seu. Sem isso o `next dev` na máquina do Natan pegaria a
 * fila da produção.
 *
 * O padrão segue o próprio servidor: produção em produção, sandbox no resto.
 * `SPEDY_AMBIENTE` sobrescreve quando for preciso.
 */

export type AmbienteFiscal = "sandbox" | "producao";

export const URL_DA_SPEDY: Record<AmbienteFiscal, string> = {
  sandbox: "https://sandbox-api.spedy.com.br/v1",
  producao: "https://api.spedy.com.br/v1",
};

export function ambienteFiscal(): AmbienteFiscal {
  const declarado = String(process.env.SPEDY_AMBIENTE || "").trim().toLowerCase();
  if (declarado === "producao" || declarado === "produção" || declarado === "production") return "producao";
  if (declarado === "sandbox") return "sandbox";
  return process.env.NODE_ENV === "production" ? "producao" : "sandbox";
}

export function urlDaSpedy(ambiente: AmbienteFiscal = ambienteFiscal()) {
  return URL_DA_SPEDY[ambiente];
}

/** A chave da empresa titular: a única que cria e altera empresas. */
export function chaveDaTitular(): string | null {
  const chave = String(process.env.SPEDY_CHAVE_TITULAR || "").trim();
  return chave || null;
}

/** O Mercado Pago da Ktalogu, que vende os pacotes de notas. */
export function tokenDoMercadoPagoDaKtalogu(): string | null {
  const token = String(process.env.KTALOGU_MP_ACCESS_TOKEN || "").trim();
  return token || null;
}

export function segredoDoWebhookDoMercadoPagoDaKtalogu(): string | null {
  const segredo = String(process.env.KTALOGU_MP_WEBHOOK_SECRET || "").trim();
  return segredo || null;
}

/** Credencial de teste do Mercado Pago começa com TEST-. */
export function mercadoPagoEmTeste(token: string) {
  return token.trim().toUpperCase().startsWith("TEST-");
}

/**
 * O que falta configurar neste servidor, em linguagem de gente. Lista vazia =
 * pronto. Nunca devolve o valor de nenhuma chave, só o nome da que falta.
 */
export function pendenciasDoServidor(): string[] {
  const faltando: string[] = [];
  if (!chaveDaTitular()) faltando.push("SPEDY_CHAVE_TITULAR");
  if (!String(process.env.FISCAL_CHAVE_COFRE || "").trim()) faltando.push("FISCAL_CHAVE_COFRE");
  return faltando;
}

export function pendenciasDaVendaDePacotes(): string[] {
  const faltando: string[] = [];
  const token = tokenDoMercadoPagoDaKtalogu();
  if (!token) faltando.push("KTALOGU_MP_ACCESS_TOKEN");
  else if (ambienteFiscal() === "producao" && mercadoPagoEmTeste(token)) faltando.push("KTALOGU_MP_ACCESS_TOKEN (é de teste)");
  return faltando;
}
