import express from "express";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { gerarHtmlLivro, gerarHtmlSerie } from "./share.js";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
// User-agents dos crawlers que leem <meta property="og:*"> pra montar o
// card de prévia (WhatsApp, Facebook, Telegram, X/Twitter, Discord,
// Slack, LinkedIn). Um humano normal nunca bate aqui — só o robô que
// busca a prévia antes da pessoa abrir o link de verdade.
const PADRAO_CRAWLER = /whatsapp|facebookexternalhit|telegrambot|twitterbot|discordbot|slackbot|linkedinbot/i;
export function servirEstaticos(app) {
    const distClient = path.resolve(__dirname, "../../dist");
    app.use(express.static(distClient));
    // Resolve o compartilhamento de LINK DIRETO (sem passar pela rota
    // /share/*): se um robô de prévia pedir /livro/:id ou /serie/:nome,
    // devolve a mesma página com og:tags que a rota /share/* geraria —
    // sem isso, o crawler recebe o index.html genérico (SPA), que não tem
    // capa/título dinâmicos, e o card de compartilhamento sai sem imagem.
    // Pessoas de verdade (sem esse user-agent) continuam recebendo a SPA
    // normalmente — nada muda pra elas.
    app.get(["/livro/:id", "/serie/:nome"], async (req, res, next) => {
        const userAgent = req.get("user-agent") ?? "";
        if (!PADRAO_CRAWLER.test(userAgent))
            return next();
        try {
            const html = req.params.id
                ? await gerarHtmlLivro(Number(req.params.id))
                : await gerarHtmlSerie(req.params.nome);
            if (html) {
                res.set("Content-Type", "text/html; charset=utf-8");
                res.send(html);
                return;
            }
        }
        catch (err) {
            console.error("[static] Erro ao gerar prévia pra crawler:", err);
        }
        next(); // não achou/deu erro — cai no SPA normal, comportamento de antes
    });
    // Fallback do SPA — qualquer rota não-API cai no index.html
    app.get("*", (req, res, next) => {
        if (req.path.startsWith("/api") || req.path.startsWith("/uploads"))
            return next();
        res.sendFile(path.join(distClient, "index.html"));
    });
}
