/*
 * O espaço de cada loja para os produtos digitais.
 *
 * Assinante: 20 GB no total e até 2 GB por arquivo. Conta em teste: 1 GB e
 * 100 MB por arquivo (decidido com o Natan em 09/10/2026). Quando passa do
 * espaço, envio novo para; nada é apagado e as vendas continuam.
 */

export const MB = 1024 * 1024;
export const GB = 1024 * MB;

export type Limites = { total: number; porArquivo: number; teste: boolean };

export function limitesDaLoja(situacaoDaAssinatura: string | null | undefined): Limites {
  const teste = situacaoDaAssinatura === "teste";
  return teste ? { total: 1 * GB, porArquivo: 100 * MB, teste } : { total: 20 * GB, porArquivo: 2 * GB, teste };
}

/* Aviso de espaço: perto do fim (80%) e cheio (100%). */
export function faixaDoEspaco(usado: number, total: number): "folga" | "perto" | "cheio" {
  if (total <= 0) return "cheio";
  const fracao = usado / total;
  if (fracao >= 1) return "cheio";
  if (fracao >= 0.8) return "perto";
  return "folga";
}

/* Partes do envio: 16 MB (o R2 pede no mínimo 5 MB e todas iguais, menos a última). */
export const TAMANHO_DA_PARTE = 16 * MB;

export function partesDoArquivo(tamanho: number, parte = TAMANHO_DA_PARTE): number {
  if (!Number.isFinite(tamanho) || tamanho <= 0) return 0;
  return Math.max(1, Math.ceil(tamanho / parte));
}
