import apiClient from "@/infrastructure/apiClient";
import apiPath from "@/infrastructure/apiPath";

export default {
  /**
   * Xuất Excel chi tiết phiếu đối soát
   * @param {number} reconciliationId - ID phiếu đối soát
   * @param {number} updatedBy - ID người tạo request
   * @param {string} updatedByUserName - Tên người tạo request
   * @returns {Promise} Kết quả xuất Excel
   */
  async exportReconciliationDetail(
    reconciliationId,
    updatedBy,
    updatedByUserName
  ) {
    try {
      const response = await apiClient.post(
        apiPath.financeExcelExport.reconciliation.exportDetail(
          reconciliationId
        ),
        {
          updatedBy,
          updatedByUserName,
        }
      );
      return response.data;
    } catch (error) {
      console.error("Error exporting reconciliation detail to Excel:", error);
      throw error;
    }
  },

  /**
   * Xuất Excel danh sách phiếu đối soát
   * @param {Object} params - Tham số lọc
   * @returns {Promise} Kết quả xuất Excel
   */
  async exportReconciliationList(params) {
    try {
      const response = await apiClient.post(
        apiPath.financeExcelExport.reconciliation.export,
        params
      );
      return response.data;
    } catch (error) {
      console.error("Error exporting reconciliation list to Excel:", error);
      throw error;
    }
  },

  /**
   * Xuất Excel chi tiết phiếu chuyển khoản
   * @param {number} transferPaymentBillId - ID phiếu chuyển khoản
   * @param {number} updatedBy - ID người tạo request
   * @param {string} updatedByUserName - Tên người tạo request
   * @returns {Promise} Kết quả xuất Excel
   */
  async exportTransferPaymentBillDetail(
    transferPaymentBillId,
    updatedBy,
    updatedByUserName
  ) {
    try {
      const response = await apiClient.post(
        apiPath.financeExcelExport.transferPaymentBill.exportDetail(
          transferPaymentBillId
        ),
        {
          updatedBy,
          updatedByUserName,
        }
      );
      return response.data;
    } catch (error) {
      console.error(
        "Error exporting transfer payment bill detail to Excel:",
        error
      );
      throw error;
    }
  },

  /**
   * Xuất Excel danh sách phiếu chuyển khoản
   * @param {Object} params - Tham số lọc
   * @returns {Promise} Kết quả xuất Excel
   */
  async exportTransferPaymentBillList(params) {
    try {
      const response = await apiClient.post(
        apiPath.financeExcelExport.transferPaymentBill.export,
        params
      );
      return response.data;
    } catch (error) {
      console.error(
        "Error exporting transfer payment bill list to Excel:",
        error
      );
      throw error;
    }
  },

  /**
   * Xuất Excel danh sách phiếu chuyển khoản
   * @param {Object} params - Tham số lọc
   * @returns {Promise} Kết quả xuất Excel
   */
  async exportCustomerTransferableOrdersExcel(params) {
    try {
      const response = await apiClient.post(
        apiPath.financeExcelExport.transferPaymentBill
          .exportCustomerTransferableOrdersExcel,
        params
      );
      return response.data;
    } catch (error) {
      console.error(
        "Error exporting customer transferable orders to Excel:",
        error
      );
      throw error;
    }
  },

  /**
   * Tải file Excel đã xuất (sử dụng DownloadUrl từ API response)
   * @param {string} fileName - Tên file Excel
   * @returns {Promise} Blob data của file Excel
   * @deprecated Sử dụng DownloadUrl trực tiếp từ API response thay vì gọi method này
   */
  async downloadFile(fileName) {
    try {
      const response = await apiClient.get(
        apiPath.financeExcelExport.download(fileName),
        {
          responseType: "blob",
        }
      );
      return response.data;
    } catch (error) {
      console.error("Error downloading Excel file:", error);
      throw error;
    }
  },

  /**
   * Lấy danh sách file đã xuất
   * @param {Object} params - Tham số lọc
   * @returns {Promise} Danh sách file
   */
  async getFiles(params = {}) {
    try {
      const response = await apiClient.get(apiPath.financeExcelExport.files, {
        params,
      });
      return response.data;
    } catch (error) {
      console.error("Error getting exported files:", error);
      throw error;
    }
  },

  /**
   * Xóa file Excel
   * @param {string} fileName - Tên file Excel
   * @returns {Promise} Kết quả xóa file
   */
  async deleteFile(fileName) {
    try {
      const response = await apiClient.delete(
        apiPath.financeExcelExport.delete(fileName)
      );
      return response.data;
    } catch (error) {
      console.error("Error deleting Excel file:", error);
      throw error;
    }
  },
};
