pragma solidity ^0.5.0;


contract MessageHelper {

    event Show(bytes32 b32, uint256 number, string text);
    event Buy(bytes32 b32, uint256 number, string text, uint256 value);

    function showMessage(
        bytes32 _message,
        uint256 _number,
        string memory _text
    )
        public
        returns (bool)
    {
        emit Show(_message, _number, _text);
        return true;
    }

    function buyMessage(
        bytes32 _message,
        uint256 _number,
        string memory _text
    )
        public
        payable
        returns (bool)
    {
        emit Buy(
            _message,
            _number,
            _text,
            msg.value);
        return true;
    }

    function fail() public {
        require(false);
    }

    function call(address _to, bytes memory _data) public returns (bool) {
        // solhint-disable-next-line security/avoid-low-level-calls
        (bool success,) = _to.call(_data);
        if (success)
            return true;
        else
            return false;
    }

}
