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

export default {
  async search(searchModel) {
    const params = JSON.parse(JSON.stringify(searchModel));
    var searchResult = await apiClient
      .post(apiPath.wallet.search, params)
      .then((r) => {
        return r.data;
      })
      .catch((e) => {
        console.log(e);
        return {};
      });
    return searchResult;
  },

  // Lấy thông tin chi tiết ví
  async getById(id) {
    try {
      const response = await apiClient.get(`${apiPath.wallet.getById}${id}`);
      return response.data;
    } catch (error) {
      console.error("Error getting wallet details:", error);
      return null;
    }
  },

  // Lấy thông tin ví của người dùng hiện tại
  async getMyWallet() {
    try {
      const response = await apiClient.get(apiPath.wallet.getMyWallet);
      return response.data;
    } catch (error) {
      console.error("Error getting my wallet:", error);
      throw error;
    }
  },

  // Cân ví - Điều chỉnh số dư ví
  async adjustBalance(walletId, desiredBalance, reason) {
    try {
      const response = await apiClient.post(
        `${apiPath.wallet.balanceAdjustment}${walletId}`,
        {
          DesiredBalance: desiredBalance,
          Reason: reason
        }
      );
      return response.data;
    } catch (error) {
      console.error("Error adjusting balance:", error);
      throw error;
    }
  },

  // Chuyển tiền giữa các ví
  async transfer(destinationWalletId, amount, note, proofImageFile, requestId = null) {
    try {
      // Tạo FormData để gửi multipart/form-data
      const formData = new FormData();
      formData.append('DestinationWalletId', destinationWalletId);
      formData.append('Amount', amount);
      formData.append('Note', note || '');
      formData.append('ProofImage', proofImageFile);

      if (requestId) {
        formData.append('RequestId', requestId);
      }

      const response = await apiClient.post(
        apiPath.wallet.transfer,
        formData,
        {
          headers: {
            'Content-Type': 'multipart/form-data'
          }
        }
      );
      return response.data;
    } catch (error) {
      console.error("Error transferring money:", error);
      throw error;
    }
  },

  // Lấy lịch sử giao dịch của ví (sử dụng Transaction API mới)
  async getTransactions(searchModel) {
    try {
      // Import transactionService để sử dụng API mới
      const transactionService = (await import('./transactionService')).default;
      return await transactionService.search(searchModel);
    } catch (error) {
      console.error("Error getting wallet transactions:", error);
      return { Result: 2, Message: "Lỗi khi lấy lịch sử giao dịch", Data: { Items: [], TotalCount: 0 } };
    }
  },

  // Lấy danh sách ví gợi ý (tối đa 20 ví)
  async getSuggestions(keyword = '') {
    try {
      const response = await apiClient.get(apiPath.wallet.getSuggestions, {
        params: { keyword }
      });
      return response.data;
    } catch (error) {
      console.error("Error getting wallet suggestions:", error);
      throw error;
    }
  },
};
