How to use ERC777 tokensReceived hook for an already deployed ERC20 token like BUSD?

Hi I'm searching for days about ERC777 and tokensReceived so I'm asking here as my last arrow hope you could help me. I'm trying build a smart contract that user sends BUSD tokens to contract and after receiving the tokens the contract forwards the tokens to another address. I'm trying to have just one confirmation from user for all this process and I want to use approve/transferFrom but this one wants two confirms. i', trying user tokensReceived hook but there is no working example and here is my code:

pragma solidity ^0.8.14;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC777/IERC777.sol";
import "https://github.com/fractional-company/contracts/blob/master/src/OpenZeppelin/introspection/IERC1820Registry.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC777/IERC777Recipient.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";

contract Simple777Recipient is IERC777Recipient {

    IERC1820Registry private _erc1820 = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24);
    bytes32 constant private TOKENS_RECIPIENT_INTERFACE_HASH = keccak256("ERC777TokensRecipient");

    IERC777 private _token;

    event DoneStuff(address operator, address from, address to, uint256 amount, bytes userData, bytes operatorData);

    constructor (address token) public {
        _token = IERC777(token);

        _erc1820.setInterfaceImplementer(address(this), TOKENS_RECIPIENT_INTERFACE_HASH, address(this));
    }

    function tokensReceived(
        address operator,
        address from,
        address to,
        uint256 amount,
        bytes calldata userData,
        bytes calldata operatorData
    ) external override {
        require(msg.sender == address(_token), "Simple777Recipient: Invalid token");

        // do stuff
        emit DoneStuff(operator, from, to, amount, userData, operatorData);
    }
}

but it's not deploying. i deployed a BUSD contract that is ERC20 and used it's address to deploy this contract but it's not working.

  1. is it possible to use ERC777 hooks for an already deployed ERC20 token?
  2. how can i do it?
  3. functional example of ERC777 tokensReceived hook for already deployed ERC20 token like BUSD

No, an ERC20 token will not invoke ERC777 hooks.

It's not possible to automatically forward ERC20 tokens that are received. You need to make the user approve the tokens to your contract or generate a Permit signature, and then add a function in your contract that uses transferFrom to take tokens directly from the user's account.