import { NextResponse } from "next/server";
import { glifosDaFonte, glifosDoArquivo } from "@/lib/banner-editor/glifos-do-servidor";
import { quemPodeCriarArtes } from "@/lib/banner-editor/servidor";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

/**
 * Os glifos de uma fonte (o painel "Glifos" do texto): os caracteres que ela
 * tem e os recursos de letra (floreios, alternativas, ligaduras, estilos).
 * `?fonte=<chave>&peso=700` para as fontes da lista; `?url=` para a fonte
 * do kit da marca (só do depósito da Ktalogu).
 */
export async function GET(request: Request) {
  const acesso = await quemPodeCriarArtes();
  if ("falha" in acesso && acesso.falha) return NextResponse.json({ error: acesso.falha.texto }, { status: acesso.falha.status });
  const busca = new URL(request.url).searchParams;
  const chave = (busca.get("fonte") || "").slice(0, 60);
  const url = (busca.get("url") || "").slice(0, 600);
  const peso = Math.max(100, Math.min(900, Number(busca.get("peso")) || 400));
  try {
    const leitura = url ? await glifosDoArquivo(url) : await glifosDaFonte(chave, peso);
    if (!leitura) return NextResponse.json({ error: "Essa fonte não foi encontrada." }, { status: 404 });
    return NextResponse.json(leitura, { headers: { "Cache-Control": "private, max-age=3600" } });
  } catch (erro) {
    const woff2 = erro instanceof Error && erro.message === "woff2";
    return NextResponse.json({ error: woff2 ? "Essa fonte está em WOFF2, que ainda não dá para ler aqui. Envie a fonte em TTF ou OTF no kit da marca para ver os glifos." : "Não deu para ler a fonte agora. Tente de novo." }, { status: woff2 ? 422 : 502 });
  }
}
