import QtQuick 2.0
import QtQuick.Layouts 1.0
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.3
import org.ethereum.qml.QEther 1.0
import Qt.labs.settings 1.0
import "js/TransactionHelper.js" as TransactionHelper
import "js/NetworkDeployment.js" as NetworkDeploymentCode
import "js/QEtherHelper.js" as QEtherHelper
import "."

Rectangle {
	property variant worker
	property string applicationUrlEth
	property string applicationUrlHttp
	property string eth: registrarAddr.text
	property int ownedRegistrarDeployGas: 1179075 // TODO: Use sol library to calculate gas requirement for each tr.
	property int ownedRegistrarSetSubRegistrarGas: 50000
	property int ownedRegistrarSetContentHashGas: 50000
	property int urlHintSuggestUrlGas: 70000

	color: "#E3E3E3E3"
	anchors.fill: parent

	function show()
	{
		ctrRegisterLabel.calculateRegisterGas()
		applicationUrlEthCtrl.text = applicationUrlEth
		applicationUrlHttp.text = applicationUrlHttp
		visible = true
	}

	ColumnLayout
	{
		anchors.top: parent.top
		width: parent.width
		anchors.topMargin: 10
		id: col
		spacing: 20
		Label
		{
			anchors.top: parent.top
			anchors.left: parent.left
			anchors.leftMargin: 10
			Layout.fillWidth: true
			text: qsTr("Register your Dapp on the Name registrar Contract")
		}

		RowLayout
		{
			Layout.fillWidth: true
			Layout.preferredHeight: 20
			Rectangle
			{
				Layout.preferredWidth: col.width / 2
				Label
				{
					text: qsTr("Root Registrar address")
					anchors.right: parent.right
					anchors.verticalCenter: parent.verticalCenter
				}
			}

			DefaultTextField
			{
				id: registrarAddr
				text: "31e316dace244c1efb93c565eb1974ff8efbdefe" //"c6d9d2cd449a754c494264e1809c50e34d64562b"
				visible: true
				Layout.preferredWidth: 235
			}
		}		

		RowLayout
		{
			Layout.fillWidth: true
			Layout.preferredHeight: 20
			Rectangle
			{
				Layout.preferredWidth: col.width / 2
				Label
				{
					text: qsTr("Web Application Resources URL")
					anchors.right: parent.right
					anchors.verticalCenter: parent.verticalCenter
				}
			}

			DefaultTextField
			{
				id: applicationUrlHttpCtrl
				Layout.preferredWidth: 235
			}
		}

		RowLayout
		{
			Layout.fillWidth: true
			Layout.preferredHeight: 20
			Rectangle
			{
				Layout.preferredWidth: col.width / 2
				Label
				{
					text: qsTr("Gas to use for dapp registration")
					anchors.right: parent.right
					anchors.verticalCenter: parent.verticalCenter
					id: ctrRegisterLabel
					function calculateRegisterGas()
					{
						if (!modalDeploymentDialog.visible)
							return;
						appUrlFormatted.text = NetworkDeploymentCode.formatAppUrl(applicationUrlEth.text).join('/');
						NetworkDeploymentCode.checkPathCreationCost(function(pathCreationCost)
						{
							var ether = QEtherHelper.createBigInt(pathCreationCost);
							var gasTotal = ether.multiply(worker.gasPriceInt);
							gasToUseDeployInput.value = QEtherHelper.createEther(gasTotal.value(), QEther.Wei, parent);
							gasToUseDeployInput.update();
						});
					}
				}
			}

			Ether
			{
				id: gasToUseDeployInput
				displayUnitSelection: true
				displayFormattedValue: true
				edit: true
				Layout.preferredWidth: 235
			}
		}

		RowLayout
		{
			Layout.fillWidth: true
			Layout.preferredHeight: 20
			Rectangle
			{
				Layout.preferredWidth: col.width / 2
				Label
				{
					text: qsTr("Ethereum Application URL")
					anchors.right: parent.right
					anchors.verticalCenter: parent.verticalCenter
				}
			}

			Rectangle
			{
				height: 25
				color: "transparent"
				Layout.preferredWidth: 235
				DefaultTextField
				{
					width: 235
					id: applicationUrlEthCtrl
					onTextChanged: {
						ctrRegisterLabel.calculateRegisterGas();
					}
				}

				DefaultLabel
				{
					id: appUrlFormatted
					anchors.verticalCenter: parent.verticalCenter;
					anchors.top: applicationUrlEth.bottom
					anchors.topMargin: 10
					font.italic: true
					font.pointSize: appStyle.absoluteSize(-1)
				}
			}
		}


	}

	RowLayout
	{
		anchors.bottom: parent.bottom
		width: parent.width
		anchors.bottomMargin: 8
		Button
		{
			anchors.right: parent.right
			anchors.rightMargin: 10
			text: qsTr("Register Dapp")
			width: 30
			onClicked:
			{
				if (applicationUrlEthCtrl.text !== applicationUrlEth)
				{
					var inError = [];
					var ethUrl = NetworkDeploymentCode.formatAppUrl(applicationUrlEth.text);
					for (var k in ethUrl)
					{
						if (ethUrl[k].length > 32)
							inError.push(qsTr("Member too long: " + ethUrl[k]) + "\n");
					}
					if (!worker.stopForInputError(inError))
					{
						NetworkDeploymentCode.registerDapp(function(){
						})
					}
				}


				if (applicationUrlHttpCtrl.text !== applicationUrlHttp)
				{
					if (!(ethUrl.length === 1 && ethUrl[0] === projectModel.projectTitle))
					{
						applicationUrlEth.text = ethUrl.join('/')
					}
					if (applicationUrlHttp.text === "" || deploymentDialog.packageHash === "")
					{
						deployDialog.title = text;
						deployDialog.text = qsTr("Please provide the link where the resources are stored and ensure the package is aleary built using the deployment step.")
						deployDialog.open();
						return;
					}
					var inError = [];
					if (applicationUrlHttp.text.length > 32)
						inError.push(qsTr(applicationUrlHttp.text));
					if (!worker.stopForInputError(inError))
					{
						registerToUrlHint(function(){
						})
					}
				}
			}
		}
	}
}