import axios from "axios";
import config from "@/app.config";

import { useCounterMixin } from "@/stores/mixin";

const mixin = useCounterMixin();
const { showLoader, hideLoader } = mixin;

async function genReport(data: any, fileName: string, type: string = "docx") {
  showLoader();
  await axios
    .post(config.API.reportTemplate + `/docx`, data, {
      headers: {
        "content-Type": "application/json",
        accept:
          type === "docx"
            ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
            : "application/pdf",
      },
      responseType: "arraybuffer",
    })
    .then((res) => {
      const responseData = res.data;
      if (responseData) {
        const mimeType =
          type === "docx"
            ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
            : "application/pdf";

        const blob = new Blob([responseData], { type: mimeType });
        const url = URL.createObjectURL(blob);

        const baseName = fileName.trim();
        const extension = type === "docx" ? "docx" : "pdf";

        const link = document.createElement("a");
        link.href = url;
        link.download = `${baseName}.${extension}`;
        document.body.appendChild(link);
        link.click();

        setTimeout(() => {
          document.body.removeChild(link);
          URL.revokeObjectURL(url);
        }, 100);
      }
    })
    .catch((err) => {
      console.log(err);
    })
    .finally(() => {
      hideLoader();
    });
}

export default genReport;
