// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

/// TEST-ONLY mock (local hardhat — NEVER deploy to chain 2800). An ERC20-shaped
/// token whose transfer / transferFrom ALWAYS return false WITHOUT reverting.
/// This is the only way to exercise the `require(transferFrom(...), "...")`
/// FALSE branch in AereFeeBurnVault.burnToken and the
/// `ret.length > 0 && !abi.decode(ret,(bool))` revert branch of
/// sAEREv2's SafeERC20LikeV2.safeTransferFrom — a compliant token whose
/// transferFrom returns true or reverts can never reach those branches.
contract MockReturnFalseERC20 {
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    function mint(address to, uint256 amt) external {
        balanceOf[to] += amt;
    }

    function approve(address spender, uint256 amt) external returns (bool) {
        allowance[msg.sender][spender] = amt;
        return true;
    }

    /// Always returns false, moves nothing.
    function transfer(address, uint256) external pure returns (bool) {
        return false;
    }

    /// Always returns false, moves nothing.
    function transferFrom(address, address, uint256) external pure returns (bool) {
        return false;
    }
}
