"use client"; import { NEXT_PUBLIC_API_URL } from "@/config/api"; import { clientAuthFetch } from "@/app/utils/clientAuthFetch"; import type { ExpiryItemFilter } from "@/app/api/stockIssue/actions"; /** Result tab currently shown; backend may filter the workbook by this bucket. */ export type ExpiryExportBucket = "expired" | "today" | "upcoming"; export interface ExportExpiryItemExcelParams extends ExpiryItemFilter { bucket?: ExpiryExportBucket; } /** * FP-MTMS Version Checklist | Functions Ref. No. 74 | v1.0.2 | 2026-09-07 * GET /pickExecution/issues/expiryItem/excel * Query: itemCode, itemName, lotNo, daysAhead, bucket (expired|today|upcoming; omit for all categories) * Response: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet * Optional Content-Disposition filename. */ export async function exportExpiryItemExcel( filters: ExportExpiryItemExcelParams, ): Promise { const params = new URLSearchParams(); if (filters.itemCode) params.set("itemCode", filters.itemCode); if (filters.itemName) params.set("itemName", filters.itemName); if (filters.lotNo) params.set("lotNo", filters.lotNo); if (filters.daysAhead != null) params.set("daysAhead", String(filters.daysAhead)); if (filters.bucket) params.set("bucket", filters.bucket); const queryString = params.toString(); const url = `${NEXT_PUBLIC_API_URL}/pickExecution/issues/expiryItem/excel${queryString ? `?${queryString}` : ""}`; const response = await clientAuthFetch(url, { method: "GET", headers: { Accept: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", }, }); if (response.status === 401 || response.status === 403) { throw new Error("Unauthorized"); } if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const blob = await response.blob(); const downloadUrl = window.URL.createObjectURL(blob); const link = document.createElement("a"); link.href = downloadUrl; const contentDisposition = response.headers.get("Content-Disposition"); let fileName = "expiry-items.xlsx"; if (contentDisposition?.includes("filename=")) { fileName = contentDisposition .split("filename=")[1] .split(";")[0] .replace(/"/g, ""); } link.setAttribute("download", fileName); document.body.appendChild(link); link.click(); link.remove(); window.URL.revokeObjectURL(downloadUrl); }