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

export default {
  /**
   * Lấy danh sách tài khoản ngân hàng theo khách hàng
   * @param {number} customerId - ID khách hàng
   * @returns {Promise<Array>} Danh sách tài khoản ngân hàng
   */
  async getByCustomerId(customerId) {
    try {
      const response = await apiClient.get(
        `${apiPath.customerBankAccount.getByCustomerId}${customerId}`
      );
      return response.data || [];
    } catch (error) {
      console.error("Error getting bank accounts by customer ID:", error);
      return [];
    }
  },

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

  /**
   * Tạo mới hoặc cập nhật tài khoản ngân hàng
   * @param {Object} model - Dữ liệu tài khoản ngân hàng
   * @returns {Promise<Object>} Kết quả tạo/cập nhật
   */
  async createOrUpdate(model) {
    try {
      const params = JSON.parse(JSON.stringify(model));
      const response = await apiClient.post(
        apiPath.customerBankAccount.createOrUpdate,
        params
      );
      return response.data || {};
    } catch (error) {
      console.error("Error creating/updating bank account:", error);
      throw error;
    }
  },

  /**
   * 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.customerBankAccount.delete}${id}`
      );
      return response.data || {};
    } catch (error) {
      console.error("Error deleting bank account:", error);
      throw error;
    }
  },

  /**
   * Đặt tài khoản làm mặc định
   * @param {number} id - ID tài khoản ngân hàng
   * @returns {Promise<Object>} Kết quả đặt mặc định
   */
  async setDefault(id) {
    try {
      const response = await apiClient.put(
        `${apiPath.customerBankAccount.setDefault}${id}`
      );
      return response.data || {};
    } catch (error) {
      console.error("Error setting default bank account:", error);
      throw error;
    }
  },

  /**
   * Lấy tài khoản mặc định của khách hàng
   * @param {number} customerId - ID khách hàng
   * @returns {Promise<Object>} Tài khoản mặc định
   */
  async getDefaultByCustomerId(customerId) {
    try {
      const response = await apiClient.get(
        `${apiPath.customerBankAccount.getDefaultByCustomerId}${customerId}`
      );
      return response.data || {};
    } catch (error) {
      console.error("Error getting default bank account:", error);
      return {};
    }
  },

  /**
   * Tìm kiếm tài khoản ngân hàng
   * @param {Object} searchModel - Điều kiện tìm kiếm
   * @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.customerBankAccount.search,
        params
      );
      return response.data || { items: [], recordsTotal: 0, recordsFiltered: 0 };
    } catch (error) {
      console.error("Error searching bank accounts:", error);
      return { items: [], recordsTotal: 0, recordsFiltered: 0 };
    }
  },
};
