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",
  folder: string = ""
) {
  showLoader();
  await axios
    .post(`${config.API.reportTemplate}/docx${folder}`, data, {
      headers:
        type == "docx"
          ? {
              accept:
                "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
              "content-Type": "application/json",
            }
          : {
              accept: "application/pdf",
              "content-Type": "application/json",
            },
      responseType: "arraybuffer",
    })
    .then((res) => {
      const responseData = res.data;
      if (responseData) {
        // --- ส่วนที่ปรับปรุง 1: กำหนด MIME Type ให้ตรงกับไฟล์ที่รับมาจริง ---
        const mimeType =
          type === "docx"
            ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
            : "application/pdf";

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

        // --- ส่วนที่ปรับปรุง 2: จัดการชื่อไฟล์ (ป้องกันนามสกุลซ้อน) ---
        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();

        // หน่วงเวลาเล็กน้อยก่อนลบ element และ revoke URL เพื่อให้ Browser ทำงานเสร็จ
        setTimeout(() => {
          document.body.removeChild(link);
          URL.revokeObjectURL(url);
        }, 100);
      }
    })
    .catch((err) => {
      console.log(err);
    })
    .finally(() => {
      hideLoader();
    });
}

export default genReport;
