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

export default {
  /**
   * Tìm kiếm tài khoản ngân hàng
   * @param {Object} searchModel - Model tìm kiếm với SmartTableParam
   * @returns {Promise<Object>} Kết quả tìm kiếm
   */
  async search(searchModel) {
    try {
      const params = JSON.parse(JSON.stringify(searchModel));
      const response = await apiClient.post(apiPath.bankAccount.search, params);
      return response.data;
    } catch (error) {
      console.error("Error searching bank accounts:", error);
      return { Items: [], TotalRecord: 0 };
    }
  },

  /**
   * Lấy chi tiết tài khoản ngân hàng theo ID
   * @param {number} id - ID tài khoản ngân hàng
   * @returns {Promise<Object>} Thông tin chi tiết tài khoản
   */
  async getById(id) {
    try {
      const response = await apiClient.get(`${apiPath.bankAccount.getById}${id}`);
      return response.data;
    } catch (error) {
      console.error("Error getting bank account details:", error);
      return null;
    }
  },

  /**
   * Tạo hoặc cập nhật tài khoản ngân hàng
   * @param {Object} accountModel - Model tài khoản ngân hàng
   * @returns {Promise<Object>} Kết quả tạo/cập nhật
   */
  async createOrUpdate(accountModel) {
    try {
      const params = JSON.parse(JSON.stringify(accountModel));
      const response = await apiClient.post(apiPath.bankAccount.createOrUpdate, params);
      return response.data;
    } catch (error) {
      console.error("Error creating/updating bank account:", error);
      return { Result: 2, Message: "Có lỗi xảy ra khi lưu tài khoản ngân hàng" };
    }
  },

  /**
   * Xóa tài khoản ngân hàng
   * @param {number} id - ID tài khoản ngân hàng
   * @returns {Promise<Object>} Kết quả xóa
   */
  async delete(id) {
    try {
      const response = await apiClient.delete(`${apiPath.bankAccount.delete}${id}`);
      return response.data;
    } catch (error) {
      console.error("Error deleting bank account:", error);
      return { Result: 2, Message: "Có lỗi xảy ra khi xóa tài khoản ngân hàng" };
    }
  },

  /**
   * Import sao kê ngân hàng
   * @param {FormData} formData - Form data chứa file Excel và thông tin import
   * @returns {Promise<Object>} Kết quả import
   */
  async importStatement(formData) {
    try {
      const response = await apiClient.post(apiPath.bankAccount.importStatement, formData, {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      });
      return response.data;
    } catch (error) {
      console.error("Error importing bank statement:", error);
      return { Result: 2, Message: "Có lỗi xảy ra khi import sao kê ngân hàng" };
    }
  },

  /**
   * Tìm kiếm giao dịch ngân hàng
   * @param {Object} searchModel - Model tìm kiếm giao dịch
   * @returns {Promise<Object>} Kết quả tìm kiếm giao dịch
   */
  async searchTransactions(searchModel) {
    try {
      const params = JSON.parse(JSON.stringify(searchModel));
      const response = await apiClient.post(apiPath.bankAccount.searchTransactions, params);
      return response.data;
    } catch (error) {
      console.error("Error searching bank transactions:", error);
      return { Items: [], TotalRecord: 0 };
    }
  },

  /**
   * Lấy danh sách tài khoản ngân hàng hoạt động
   * @returns {Promise<Array>} Danh sách tài khoản hoạt động
   */
  async getActiveAccounts() {
    try {
      const response = await apiClient.get(apiPath.bankAccount.getActiveAccounts);
      return response.data || [];
    } catch (error) {
      console.error("Error getting active bank accounts:", error);
      return [];
    }
  },

  /**
   * Tìm kiếm lịch sử import sao kê
   * @param {Object} searchModel - Model tìm kiếm lịch sử import
   * @returns {Promise<Object>} Kết quả tìm kiếm lịch sử import
   */
  async searchImportHistory(searchModel) {
    try {
      const params = JSON.parse(JSON.stringify(searchModel));
      const response = await apiClient.post(apiPath.bankAccount.searchImportHistory, params);
      return response.data;
    } catch (error) {
      console.error("Error searching import history:", error);
      return { Items: [], TotalRecord: 0 };
    }
  },

  /**
   * Cập nhật số dư tài khoản ngân hàng
   * @param {Object} updateModel - Model cập nhật số dư
   * @returns {Promise<Object>} Kết quả cập nhật
   */
  async updateBalance(updateModel) {
    try {
      const params = JSON.parse(JSON.stringify(updateModel));
      const response = await apiClient.put(apiPath.bankAccount.updateBalance, params);
      return response.data;
    } catch (error) {
      console.error("Error updating bank account balance:", error);
      return { Result: 2, Message: "Có lỗi xảy ra khi cập nhật số dư tài khoản" };
    }
  }
};
