const MINUTE = 60;
const HOUR = MINUTE * 60;
const DAY = HOUR * 24;
const MAX_RELATIVE_DAYS = 30;

/** Formata uma data ISO como tempo relativo ("há 30 minutos"), sem depender de nenhuma
 * biblioteca externa — não existe uma já instalada no projeto. Cai para data absoluta
 * (pt-BR) além de 30 dias, onde tempo relativo deixa de ser útil. */
export function formatRelativeTime(iso: string): string {
  const date = new Date(iso);
  const diffSeconds = Math.floor((Date.now() - date.getTime()) / 1000);

  if (diffSeconds < 30) return "agora mesmo";
  if (diffSeconds < MINUTE) return `há ${diffSeconds} segundos`;
  if (diffSeconds < HOUR) {
    const minutes = Math.floor(diffSeconds / MINUTE);
    return `há ${minutes} ${minutes === 1 ? "minuto" : "minutos"}`;
  }
  if (diffSeconds < DAY) {
    const hours = Math.floor(diffSeconds / HOUR);
    return `há ${hours} ${hours === 1 ? "hora" : "horas"}`;
  }
  if (diffSeconds < DAY * MAX_RELATIVE_DAYS) {
    const days = Math.floor(diffSeconds / DAY);
    return `há ${days} ${days === 1 ? "dia" : "dias"}`;
  }

  return date.toLocaleString("pt-BR", { dateStyle: "short", timeStyle: "short" });
}
