"use client";

import { useEffect } from "react";

/**
 * Define o título da aba enquanto a página está montada.
 *
 * Vale mais do que parece: no Chrome e no Edge, o nome sugerido ao salvar
 * como PDF vem do `document.title`. Com o titulo do layout raiz, todo
 * relatorio baixado se chamava "Ktalogu - Gestao.pdf" e a pessoa terminava com
 * uma pasta de arquivos indistinguiveis. Aqui o nome ja sai com empresa e
 * periodo.
 *
 * As paginas de relatorio sao client components e nao podem exportar
 * `metadata`, entao o titulo e ajustado em tempo de execucao — e devolvido ao
 * anterior na saida, para nao vazar para a proxima tela.
 */
export function useTituloDaPagina(titulo: string | null) {
  useEffect(() => {
    if (!titulo) return;

    const anterior = document.title;
    document.title = titulo;

    /* O App Router reaplica o titulo do layout ao terminar a navegacao, e a
       pagina de relatorio chama `router.replace` a cada ajuste de filtro para
       manter o recorte na URL. Sem isto, o titulo voltava a "Ktalogu - Gestao"
       logo depois de definido e o PDF saia com o nome errado.

       O observador fica no `head`, e nao na tag `title`: o Next troca o
       elemento inteiro em vez de editar o texto dele, entao um observador
       preso a tag antiga para de receber aviso justamente quando ela e
       substituida — que e o momento que importa. */
    const observador = new MutationObserver(() => {
      if (document.title !== titulo) document.title = titulo;
    });
    observador.observe(document.head, { childList: true, subtree: true, characterData: true });

    return () => {
      observador.disconnect();
      document.title = anterior;
    };
  }, [titulo]);
}

/** Data em pt-BR com hifens: `/` vira separador de pasta no nome do arquivo. */
export function dataParaNome(iso: string) {
  const [a, m, d] = iso.split("-");
  return `${d}-${m}-${a}`;
}

/* Um espaco entre as partes e nenhum caractere que o sistema de arquivos
   recuse: o titulo aqui e, na pratica, o nome do PDF. */
export function nomeDoRelatorio(de: string, ate: string, empresa?: string | null) {
  const periodo = `${dataParaNome(de)} a ${dataParaNome(ate)}`;
  const quem = empresa ? ` - ${empresa}` : "";
  return `Relatorio da agenda${quem} - ${periodo}`;
}
