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

/**
 * @title Stake Ether.
 * @dev Stake ETH and receive stETH while staking.

 */

import { DSMath } from "../../common/math.sol";
import { Basic } from "../../common/basic.sol";
import { Events } from "./events.sol";
import { Helpers } from "./helpers.sol";

abstract contract Resolver is Events, DSMath, Basic, Helpers {
	/**
	 * @dev deposit ETH into Lido.
	 * @notice stake Eth in Lido, users receive stETH tokens on a 1:1 basis representing their staked ETH.
	 * @param amt The amount of ETH to deposit. (For max: `uint256(-1)`)
	 * @param getId ID to retrieve amt.
	 * @param setId ID stores the amount of ETH deposited.
	 */
	function deposit(
		uint256 amt,
		uint256 getId,
		uint256 setId
	)
		public
		payable
		returns (string memory _eventName, bytes memory _eventParam)
	{
		uint256 _amt = getUint(getId, amt);

		_amt = _amt == uint256(-1) ? address(this).balance : _amt;
		lidoInterface.submit{ value: amt }(treasury);
		setUint(setId, _amt);

		_eventName = "LogDeposit(uint256,uint256,uint256)";
		_eventParam = abi.encode(_amt, getId, setId);
	}
}

contract ConnectV2LidoStEth is Resolver {
	string public constant name = "LidoStEth-v1";
}