import type { Request, Response, Router } from "express";
import fs from "fs";
import path from "path";

/**
 * DIAGNÓSTICO DE CONTINUIDADE (jul/2026) — temporário, só para investigar
 * o problema de "para de tocar quando a tela apaga". Sem isso, cada
 * tentativa de correção era um palpite às cegas — o Marsan pediu,
 * corretamente, para parar de adivinhar.
 *
 * Registra em um arquivo de texto simples cada etapa da troca de faixa,
 * com hora exata e se a aba estava visível ou escondida naquele instante.
 * Depois de reproduzir o problema, basta ler o arquivo — sem precisar de
 * ferramentas de depuração remota no celular.
 *
 * TAMANHO TRAVADO DE PROPÓSITO (lição do log de 10GB de hoje mais cedo):
 * nunca deixa o arquivo passar de ~500KB — trunca sozinho antes de
 * escrever, mantendo só o mais recente.
 */

const LOG_PATH = path.resolve(process.cwd(), "debug-continuidade.log");
const TAMANHO_MAXIMO_BYTES = 500_000;
const MENSAGEM_MAXIMA_CHARS = 300;

function escreverLog(linha: string) {
  try {
    if (fs.existsSync(LOG_PATH)) {
      const stats = fs.statSync(LOG_PATH);
      if (stats.size > TAMANHO_MAXIMO_BYTES) {
        // Mantém só a metade mais recente do arquivo antes de continuar
        // escrevendo — nunca deixa crescer sem limite.
        const conteudo = fs.readFileSync(LOG_PATH, "utf-8");
        const metadeRecente = conteudo.slice(Math.floor(conteudo.length / 2));
        fs.writeFileSync(LOG_PATH, metadeRecente);
      }
    }
    fs.appendFileSync(LOG_PATH, linha + "\n");
  } catch {
    // Nunca deixa uma falha de log quebrar o app em si.
  }
}

export function registerDebugLogRoutes(app: Router) {
  app.post("/api/debug-log", (req: Request, res: Response) => {
    const mensagem = typeof req.body?.mensagem === "string" ? req.body.mensagem : "";
    if (!mensagem) {
      res.status(204).end();
      return;
    }

    const truncada = mensagem.slice(0, MENSAGEM_MAXIMA_CHARS);
    const timestamp = new Date().toISOString();
    escreverLog(`[${timestamp}] ${truncada}`);

    // 204: resposta mínima, não precisa de corpo — sendBeacon nem lê a resposta.
    res.status(204).end();
  });
}
