import { useState, useCallback } from 'react' import { useReferralchef, useReferralRewardchef } from 'hooks/useContract' import useTokenBalance from 'hooks/useTokenBalance' import { getAddress, getReferralAddress } from 'utils/addressHelpers' import tokensList from 'config/constants/tokens' import useToast from 'hooks/useToast' import { useTranslation } from 'contexts/Localization' import { ethers, Contract } from 'ethers' import { getBalanceNumber, getDecimalAmountNumber } from 'utils/formatBalance' import { getWithdrawRewardParams, getBuyReferralParams } from 'services/referral' export const useCheckTokenBalance = ({ isBnb, isHcc, isUsdt }) => { const { balance: usdtTokenBalance } = useTokenBalance(getAddress(tokensList.usdt.address)) const { balance: hccTokenBalance } = useTokenBalance(getAddress(tokensList.hcc.address)) const { toastWarning } = useToast() const { t } = useTranslation() const onCheck = useCallback( (hccAmount, usdtAmount) => { if ( (isHcc && getBalanceNumber(hccTokenBalance) === hccAmount) || (isUsdt && getBalanceNumber(usdtTokenBalance) === usdtAmount) ) { toastWarning(t('Insufficient Balance')) } }, [isBnb, isHcc, isUsdt], ) return [onCheck] } export const useBuyTransaction = () => { const referralContract = useReferralchef() const transaction = async () => { const data = await getBuyReferralParams() const { address, hccPrice, otherPaymentPirce, code, timestamp, sign } = data const params = [address, hccPrice, otherPaymentPirce, code, timestamp, sign] // const price = getDecimalAmountNumber(receive) const res = await referralContract.mint(...params) return res } return transaction } export const useWithdraw = () => { const referralRewardContract = useReferralRewardchef() const transaction = async () => { const data = await getWithdrawRewardParams() const { address, receive, timestamp, sign } = data const params = [address, receive, timestamp, sign] const price = getDecimalAmountNumber(receive) const res = await referralRewardContract.withDrawReward(...params, { value: price }) return res } return transaction } export const useApproveReferral = (tokenContract: Contract) => { const handleApprove = useCallback(async () => { try { const tx = await tokenContract.approve(getReferralAddress(), ethers.constants.MaxUint256) const receipt = await tx.wait() return receipt.status } catch (e) { return false } }, [tokenContract]) return { onApprove: handleApprove } } export default useCheckTokenBalance