import { useEffect } from 'react';

const useMetaMaskEffect = (account, tokenContract, setUserBalance, onDataChange = () => {}, web3) => {
  useEffect(() => {
    if(account && tokenContract) {
      const fetchBalance = async () => {
        const balance = await tokenContract.methods.balanceOf(account).call();
        setUserBalance(balance);
      };
      
      fetchBalance();

      const handleAccountsChanged = async (accounts) => {
        const balance = await tokenContract.methods.balanceOf(accounts[0]).call();
        setUserBalance(balance);

        onDataChange({ account, balance: web3.utils.fromWei(balance, 'ether') });
      };

      window.ethereum.on('accountsChanged', handleAccountsChanged);

      // Cleanup to remove listener
      return () => window.ethereum.removeListener('accountsChanged', handleAccountsChanged);
    }
  }, [account, tokenContract, web3, setUserBalance, onDataChange]);
};

export default useMetaMaskEffect;
