interface ITokenGeyserManager {
    /**
        @dev Retrieves total rewards earned for a specific staking token
        @param token - address of the ERC20 token
    */
    function getEarned(address token) external view returns (uint256);

    /**
        @dev Retrieves staked amount for a specific token address
        @param token - address of the ERC20 token
    */
    function getStake(address token) external view returns (uint256);

    /**
        @dev Retrieves total rewards earned for all the staking tokens
    */
    function getEarnings()
        external
        view
        returns (address[] memory, uint256[] memory);

    /**
        @dev Retrieves all stakes for sender
     */
    function getStakes()
        external
        view
        returns (address[] memory, uint256[] memory);

    /**
        @dev Stakes all tokens sent
        @param tokens - array of tokens' addresses you want to stake
        @param amounts - stake amount you want for each token
     */
    function stake(
        address[] calldata tokens,
        uint256[] calldata amounts,
        int256 nftId
    ) external returns (bool);

    /**
        @dev Unstakes all tokens sent
        @param tokens - array of tokens' addresses you want to unstake
        @param amounts - unstake amount you want for each token
     */
    function unstake(address[] calldata tokens, uint256[] calldata amounts)
        external;

    /**
        @dev Adds a new geyser in the team
        @param token - address of the staking token for which the geyser was created
        @param geyser - address of the geyser
     */
    function addGeyser(address token, address geyser) external returns (bool);

    event Staked(address indexed sender, address indexed token, uint256 amount);
    event Unstaked(
        address indexed sender,
        address indexed token,
        uint256 amount
    );

    event GeyserAdded(
        address indexed sender,
        address indexed geyser,
        address token
    );
    event GeyserManagerCreated(
        address indexed sender,
        address indexed geyserManager
    );
}
function getEarned(address token) external view returns (uint256);

/**
 @dev Retrieves total rewards earned for a specific staking token
 @param token - address of the ERC20 token
 */