Automatically sending all wallet balance after removing charges using ethersjs Estimate gas prices with Ethers

I want my code to be able to send all balance of the wallet after calculating and removing transaction charges.I want a zero balance after the sendTransation. What am I missing in my code below

const { ethers } = require('ethers')

const provider = new ethers.providers.JsonRpcProvider("")

const addressReceiver = ''

const privateKeys = [""]


const bot = async =>{
    provider.on('block', async () => {
        console.log('Listening to new block, waiting ;)');
        for (let i = 0; i < privateKeys.length; i++){
            const _target = new ethers.Wallet(privateKeys[i]);
            const target = _target.connect(provider);
            const balance = await provider.getBalance(target.address);
            const txBuffer = ethers.utils.parseEther("0.002");
            if (balance.sub(txBuffer) > 0){
                console.log("New Account with Eth!");
                const amount = balance.sub(txBuffer);
                try {
                    await target.sendTransaction({
                        to: addressReceiver,
                        value: amount
                    });
                    console.log(`Success! transferred -->${ethers.utils.formatEther(balance)}`);
                } catch(e){
                    console.log(`error: ${e}`);
                }
            }
        }
    })
}
bot();