//SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma abicoder v2;

import "./helpers.sol";
import {Events} from "./events.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";

contract uniswapSellBeta is Helpers, Events {
    using SafeERC20 for IERC20;

    function sell(
        address tokenIn,
        address tokenOut,
        uint24 fee,
        uint256 amountIn,
        uint256 amountOutMinimum
    )
        external
        payable
        returns (string memory _eventName, bytes memory _eventParam)
    {
        IERC20(tokenIn).safeApprove(address(router), amountIn);
        uint256 amountOut = swapSingleInput(
            getParams(
                tokenIn,
                tokenOut,
                address(this),
                fee,
                amountIn,
                amountOutMinimum
            )
        );
        _eventName = "LogSell(uint24,uint256,uint256,uint256)";
        _eventParam = abi.encode(fee, amountIn, amountOut, amountOutMinimum);
    }
}

contract ConnectV2UniswapSellBeta is uniswapSellBeta {
    string public constant name = "Uniswap-Sell-Beta";
}