import QtQuick 2.0
import QtQuick.Controls 1.0;
import QtQuick.Controls.Styles 1.0
import QtQuick.Layouts 1.0;
import QtWebEngine 1.0
import QtWebEngine.experimental 1.0
import QtQuick.Window 2.0;
import Ethereum 1.0
import Qt.WebSockets 1.0
//import "qwebchannel.js" as WebChannel
	


Rectangle {
	id: window
	anchors.fill: parent
	color: "#00000000"

	property var title: "Network"
	property var iconSource: "../mining-icon.png"
	property var menuItem
	property var hideUrl: true

	property alias url: webview.url
	property alias windowTitle: webview.title
	property alias webView: webview

	property var cleanPath: false
	property var open: function(url) {
		if(!window.cleanPath) {
			var uri = url;
			if(!/.*\:\/\/.*/.test(uri)) {
				uri = "http://" + uri;
			}

			var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/

			if(reg.test(uri)) {
				uri.replace(reg, function(match, pre, domain, path) {
					uri = pre;

					var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4));
					var ip = [];
					for(var i = 0, l = lookup.length; i < l; i++) {
						ip.push(lookup.charCodeAt(i))
					}

					if(ip.length != 0) {
						uri += lookup;
					} else {
						uri += domain;
					}

					uri += path;
				});
			}

			window.cleanPath = true;

			webview.url = uri;

			//uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>");
			uriNav.text = uri;

		} else {
			// Prevent inf loop.
			window.cleanPath = false;
		}
	}

	Label {
        objectName: "miningLabel"
        visible: false
        font.pixelSize: 10
        anchors.right: lastBlockLabel.left
        anchors.rightMargin: 5
    	onTextChanged: {
			menuItem.secondaryTitle =  eth.miner().mining()? eth.miner().hashRate() + " Khash"  : ""
    	}
    }

	Item {
		objectName: "root"
		id: root
		anchors.fill: parent
		state: "inspectorShown"

		Timer {
	         interval: 1000; running: true; repeat: true
	         onTriggered: {
	         	webview.runJavaScript("Miner.mining", function(miningSliderValue) {  

	         			// Check if it's mining and set it accordingly       				
         				if (miningSliderValue > 0 && !eth.miner().mining()) {
							// If the 
	         				eth.miner().start();
	         			} else if (miningSliderValue == 0 && eth.miner().mining()) {
	         				eth.miner().stop();
	         			} else if (eth.miner().mining()) {
	         				
	         				webview.runJavaScript('var miningData = MiningData.findOne(); MiningData.update(miningData._id, {$inc: {totalTimeSpent: 1}}); Miner.hashrate = ' + eth.miner().hashRate() );

	         				//var miningData = MiningData.findOne(); MiningData.update(miningData._id, {$inc: {totalTimeSpent: 1}});
	         				
	         			} else if (miningSliderValue == "undefined") {
	         				
	         				webview.runJavaScript('Miner.mining = 0' );
	         				
	         			}					
				});

	         }
	    }

		WebEngineView {
			objectName: "webView"
			id: webview
			anchors.fill: parent

			url: "network-health/index.html"
			//url: "http://localhost:3000/"

			experimental.settings.javascriptCanAccessClipboard: true


			onJavaScriptConsoleMessage: {
				console.log(sourceID + ":" + lineNumber + ":" + JSON.stringify(message));
			}

			onLoadingChanged: {
				if (loadRequest.status == WebEngineView.LoadSucceededStatus) {
                    webview.runJavaScript(eth.readFile("mist.js"));
				}
			}
		}

		WebEngineView {
			id: inspector
			visible: false
			z:10
			anchors {
				left: root.left
				right: root.right
				top: root.top
				bottom: root.bottom
			}

		}

		states: [
			State {
				name: "inspectorShown"
				PropertyChanges {
					target: inspector
				}
			}
		]
	}
}
