contract FrenchIcoToken is ERC20Mintable {

    event NewToken(address owner, string copyright, string name, string symbol);

    uint8 public constant decimals = 18;
    string public name;
    string public symbol;

    /**
     * @param _symbol Token symbol
     * @param _name Token name
     */
    constructor(string memory _symbol, string memory _name) public {
        symbol = _symbol;
        name = _name;
        emit NewToken(msg.sender, "Copyright FRENCHICO", name, symbol);
    }

    /**
     * Send tokens through a gateway
     *
     * @param gatewayAddr Gateway address
     * @param amount Tokens amount
     * @param ref Reference
     * @param action Action that will be done by the Gateway smart contract
     * @param arguments Arguments of the action
     * @return result Result
     */
    function sendToGateway(
        address gatewayAddr,
        uint amount,
        string calldata ref,
        string calldata action,
        string calldata arguments
    )
        external
        returns (bool result)
    {
        approve(address(gatewayAddr), amount); // Authorize the gateway to get the amount of tokens from the sender
        IFrenchIcoGateway gateway = IFrenchIcoGateway(address(gatewayAddr));
        result = gateway.orderFromToken(
            msg.sender, // customer
            amount, // amount in tokens
            address(this), // token address
            ref,
            action,
            arguments
        );
    }
}
/**
 * @title FRENCHICO TOKEN
 */
function sendToGateway(
    address gatewayAddr,
    uint amount,
    string calldata ref,
    string calldata action,
    string calldata arguments
)
    external
    returns (bool result)
{
    approve(address(gatewayAddr), amount); // Authorize the gateway to get the amount of tokens from the sender
    IFrenchIcoGateway gateway = IFrenchIcoGateway(address(gatewayAddr));
    result = gateway.orderFromToken(
        msg.sender, // customer
        amount, // amount in tokens
        address(this), // token address
        ref,
        action,
        arguments
    );
}

/**
 * Send tokens through a gateway
 *
 * @param gatewayAddr Gateway address
 * @param amount Tokens amount
 * @param ref Reference
 * @param action Action that will be done by the Gateway smart contract
 * @param arguments Arguments of the action
 * @return result Result
 */