import { Request, Response } from "express";
import { PdfExport } from "../../../helpers/pdfExport";
import DynamicQueryBuilder from "../../../helpers/dynamicQueryBuilder";
import QueryStoreService from "../../../service/configuration/queryStoreService";

/**
 * @description print list by query and template
 * @param req {Request} Express req object
 * @param res {Response} Express res object
 * @returns {Promise<*>}
 */
export async function printListByQueryAndTemplate(req: Request, res: Response): Promise<any> {
  const title = req.body.title;
  const queryStore = req.body.queryStore;
  const headerId = req.body.headerId ?? null;
  const bodyId = req.body.bodyId ?? null;
  const footerId = req.body.footerId ?? null;
  const headerHeight = req.body.headerHeight ?? null;
  const footerHeight = req.body.footerHeight ?? null;

  // \/ integrate into query builder execution via shortcut
  //await MemberService.getByRunningMembership();
  //await MemberService.getAll({ noLimit:true });

  let query = (await QueryStoreService.getById(queryStore)).query;

  await DynamicQueryBuilder.executeQuery({ query, noLimit: true });

  let pdf = await PdfExport.renderFile({
    title: title,
    template: "listprint",
    saveToDisk: false,
    data: {
      today: new Date(),
    },
    customTemplate: {
      headerId,
      footerId,
      bodyId,
      headerHeight,
      footerHeight,
    },
  });

  let pdfbuffer = Buffer.from(pdf);

  res.setHeader("Content-Type", "application/pdf");
  res.setHeader("Content-Length", pdfbuffer.byteLength);
  res.setHeader("Content-Disposition", "inline; filename=preview.pdf");

  res.send(pdfbuffer);
}