interface IStakingForNFT {
    // Views
    function lastTimeRewardApplicable() external view returns (uint256);

    function rewardPerToken1() external view returns (uint256);

    function rewardPerToken2() external view returns (uint256);

    function rewardPerToken3() external view returns (uint256);

    function earnedtoken1(address account) external view returns (uint256);

    function earnedtoken2(address account) external view returns (uint256);

    function earnedtoken3(address account) external view returns (uint256);

    function getReward1ForDuration() external view returns (uint256);

    function getReward2ForDuration() external view returns (uint256);

    function getReward3ForDuration() external view returns (uint256);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function totalSupplyMultiplier() external view returns (uint256);

    function balanceOfMultiplier(address account) external view returns (uint256);

    // Mutative

    function stake(uint256 amount) external;

    function stakeMultiplier(uint256 amount) external;

    function withdraw(uint256 amount) external;

    function withdrawMultiplier(uint256 amount) external;

    function getReward() payable external;

    function exit() external;
    
    function notifyRewardAmount(uint256 reward1, uint256 reward2, uint256 reward3) external;

}
function stake(uint256 amount) external;

// Mutative