import { Router, Request, Response } from "express";
import { renderPdf } from "../services/browser.js";
import { templates, renderTemplate } from "../services/templates.js";

export const templatesRouter = Router();

// GET /v1/templates — list available templates
templatesRouter.get("/", (_req: Request, res: Response) => {
  const list = Object.entries(templates).map(([id, t]) => ({
    id,
    name: t.name,
    description: t.description,
    fields: t.fields,
  }));
  res.json({ templates: list });
});

// POST /v1/templates/:id/render — render template to PDF
templatesRouter.post("/:id/render", async (req: Request, res: Response) => {
  try {
    const id = req.params.id as string;
    const template = templates[id];
    if (!template) {
      res.status(404).json({ error: `Template '${id}' not found` });
      return;
    }

    const data = req.body;
    const html = renderTemplate(id, data);
    const pdf = await renderPdf(html, {
      format: data._format || "A4",
      margin: data._margin,
    });

    const filename = data._filename || `${id}.pdf`;
    res.setHeader("Content-Type", "application/pdf");
    res.setHeader("Content-Disposition", `inline; filename="${filename}"`);
    res.send(pdf);
  } catch (err: any) {
    console.error("Template render error:", err);
    res.status(500).json({ error: "Template rendering failed", detail: err.message });
  }
});
