Uniswap router swapExactTokensForETHSupportingFeeOnTransferTokens() gives error

When I try to invoke
IUniswapV2Router02.swapExactTokensForETHSupportingFeeOnTransferTokens(), I am getting this below error. Can someone please help what is the issue.
Fail with error ‘TransferHelper: TRANSFER_FROM_FAILED’

Below is code snippet.

function swapTokensForBNB(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> wBNB
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
            0, // accept any amount of BNB

 function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
When I dig into uniswap router code, i could see that the below stack trace

TransferHelper.safeTransferFrom(path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn); 
function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');

Hi rhat! Welcome to Open Zeppelin. In the future please use proper code formatting by placing code between two ``` . Refer to How do I ask a good question?

The code piece you posted is the basic way of doing that and should work provided that your liquidity pool is set up correctly.

Are you sure that you have set up the LP Pair and have provided liquidity to it?

Hi @Tsushima_Yoshiko ,
Thank you so much for your response. Below is my current LP details

0.002 WBNB = 1000 BEP20 Token.

And total supply is Quadrillion. (1000000000 * 10 ** 6 * 10 ** 9).
Currently I have tried to transfer 40,000 tokens which fails.
Do you see any issue with this set up.

Can you please post your entire code by linking us the contract address?

Are you using swap and liquify? I so you have too little BNB probably. Set that to false. If you are figuring out safemoon issues then visit PSA Regarding SafeMoon Forks on PancakeSwap - Transfers not working? Read This!