import { rotuloDeQuandoAbre } from "./curso.ts";

/*
 * A aula ao vivo na tela do aluno: quando é (no relógio de Brasília), como
 * está agora, e o link da transmissão só a partir de 15 minutos antes.
 */

const AO_VIVO_LIBERA_ANTES_MS = 15 * 60 * 1000;
const AO_VIVO_DURA_MS = 3 * 60 * 60 * 1000;

function primeiraMaiuscula(texto: string): string {
  return texto ? texto.charAt(0).toUpperCase() + texto.slice(1) : texto;
}

/* A aula ao vivo na tela: quando, como está agora, e o link só a partir de 15 minutos antes. */
export function aoVivoNaTela(
  emIso: string,
  link: string | null,
  agora = Date.now()
): { quando: string; situacao: string; link: string | null; liberaEmMs: number | null } {
  const momento = new Date(emIso).getTime();
  const libera = momento - AO_VIVO_LIBERA_ANTES_MS;
  const quando = new Intl.DateTimeFormat("pt-BR", {
    weekday: "long",
    day: "2-digit",
    month: "long",
    hour: "2-digit",
    minute: "2-digit",
    timeZone: "America/Sao_Paulo",
  }).format(new Date(momento));
  const situacao =
    agora < libera
      ? primeiraMaiuscula((rotuloDeQuandoAbre(new Date(momento).toISOString(), agora) ?? "").replace(/^abre/, "começa")) + "."
      : agora < momento
        ? "Começa em instantes. Já dá para entrar."
        : agora < momento + AO_VIVO_DURA_MS
          ? "Acontecendo agora."
          : "Esta transmissão já aconteceu. Se a loja deixou a gravação, o link continua valendo.";
  return {
    quando: primeiraMaiuscula(quando),
    situacao,
    link: agora >= libera ? link : null,
    liberaEmMs: agora < libera ? libera - agora : null,
  };
}
