<?php
$body = file_get_contents('php://input');

//echo $body;
$body=json_decode($body,true);

switch($body["apply"])
{
	case 'reget':
		reget($body);
		break;
	case 'ble':
		startble($body);
		break;
	case 'switchregion':
		switchregion($body);
		break;
	case 'resetminer':
		resetminer();
		break;
	case 'restartminer':
		restartminer();
		break;
	case 'loralog':
		loralog($body);
		break;
	case 'passwordset':
		passwordset($body);
		break;
	case 'reboot':
		reboot();
		break;
	case 'poweroff':
		poweroff();
		break;
	case 'download_image':
		download_image($body);
		break;
	case 'download_snap':
		download_snap($body);
		break;
	case 'restartremote':
		restartremote();
		break;
	case 'diagnostic':
		diagnostic($body);
		break;
	case 'clearlog':
		clearlog();
		break;
	default:
		getinfo();
		break;
}

function getinfo(){
	$info=array();
	//$cmd="sudo ls /root/miner_data/snap | grep .scratch | awk -F'.scratch' '{print $1}'";
	$cmd="sudo ls /root/miner_data/usrsnap";
	$res=exec($cmd);
	if($res!="")
	{
		$cmd="sudo ls /root/miner_data/usrsnap|grep loaded";
        	$res1=exec($cmd);
		if($res1!="")
		{
			$info["block"]=exec("sudo docker exec miner miner info height | awk '{print $2}'");
		}
		else
		{
			$info["block"]="miner is loading ".$res;
		}
	}
	else
	{
		$snap=exec("sudo ls /root/miner_data/snap | awk -F. '{print $1}'");
		$cmd="sudo ls /root/miner_data/snap | grep .scratch | awk -F'.scratch' '{print $1}'";
	        $res=exec($cmd);
		if($snap=="")
		{
			$info["block"]="miner is attemp downloading latest snapshot";
		}
		else if($res!="")
		{
			$info["block"]="miner is attemp downloading ".$res;
		}
		else
		{
			$cmd="sudo stat -c %Y /root/miner_data/snap/".$snap;
			$snaptime=intval(exec($cmd));
			$timenow=intval(exec("date +%s"));
			$cmd="sudo stat -c %Y /root/miner_data/snap";
			$snaptime1=intval(exec($cmd));
			if( ($timenow-$snaptime) > 1800 && ($timenow-$snaptime1) > 1800)
			{
				$info["block"]=exec("sudo docker exec miner miner info height | awk '{print $2}'");
			}
			else
			{
				$info["block"]="miner is loading ".$snap;
			}
		}
	}

	//$info["snap"]=$snap;
	//$info["snaptime"]=$snaptime;
	//$info["timenow"]=$timenow;
	//$info=json_encode($info);
	//echo $info;
	//return;
	$info["name"]=exec("cat /etc/hostname");
	$info["addr"]=exec("cat /var/data/public_keys | tail -1 | awk -F\\\" '{print $2}'");
	$info["sn"]=exec("cat /proc/cpuinfo | grep Serial |  awk '{print $3}'");
	$info["eth"]=exec("ifconfig eth0 | grep ether |  awk '{print $2}'");
	$info["wlan"]=exec("ifconfig wlan0 | grep ether |  awk '{print $2}'");
	$info["miner"]=exec("sudo docker ps | grep miner | awk '{print $2}' | awk -F: '{print $2}'| awk -F'arm64_' '{print $2}'");
	$info["eth"]=exec("ifconfig eth0 | grep ether |  awk '{print $2}'");
	$info["disk_G"]=exec("df -h | grep root | awk '{print $3}'| awk -F\"G\" '{print $1}'");
	$info["disk_p"]=exec("df -h | grep root | awk '{print $5}'| awk -F\"%\" '{print $1}'");
	$info["logsize"]=exec("sudo du -sh /var/log|awk -F' ' '{print $1}'");
	$tmp=exec("free -h | grep Mem | awk '{print $7}' | awk -F'G' '{print $1}'");
	$info["mem_p"]=100-$tmp/2*100;
	$info["mem"]=2-$tmp;
	$info["firmware"]=exec("sudo cat /root/.func/update/version.txt | awk -F. '{print $1}' | awk -F- '{print $2}'");
	$info["firmware"]="V".$info["firmware"][1].".".$info["firmware"][2].".".$info["firmware"][3];
	$info["temperature"]=intval(intval(exec("sudo cat /sys/devices/virtual/thermal/thermal_zone0/temp"))/1000);
	$info["listenaddr"]=exec("sudo /root/.func/getListenAddr.sh");
	if(strpos($info["listenaddr"],'tcp') != false){
		$info["nettype"]="no";
	}else if($info["listenaddr"]=="" || strpos($info["listenaddr"],'no listen addr')!= false)
	{
		$info["nettype"]="";
	}
	else{
		$info["nettype"]="yes";
	}
	$info["latest_firmware"]=exec("curl -s  -H 'Cache-Control: no-cache' \"http://minerback.heltec.cn/download/patch/indoor_hotspot_patch_index\" --connect-timeout 3 | tail -1 | awk '{print $1}' | awk -F. '{print $1}' | awk -F- '{print $2}'");
	if($info["latest_firmware"]!="")
	{
		$info["latest_firmware"]="V".$info["latest_firmware"][1].".".$info["latest_firmware"][2].".".$info["latest_firmware"][3];
	}
	$info["latest_miner"]=exec("curl -s \"https://quay.io/api/v1/repository/team-helium/miner/tag/?limit=20&page=1&onlyActiveTags=true\" --connect-timeout 3 --write-out '\nHTTP_Response:%{http_code}'| grep -v HTTP_Response | jq -c --arg ARCH \"arm\" '[ .tags[] | select( .name | contains(\"arm\") and contains(\"GA\")) ][0].name' | cut -d'\"' -f2 | awk -F'arm64_' '{print $2}'");
	$info["latest_block"]=exec("curl -k -s \"https://api.helium.io/v1/blocks/height\" --connect-timeout 3 | jq .data.height");
	$info["region"]=exec("sudo cat /root/.func/miner_region");
	$info["updating_miner"]=exec("sudo ls /var/lib/docker/tmp");
	if($info["updating_miner"]!="")
	{
		$info["updating_miner"]="(system is installing the newest miner release)";
	}
	$info=json_encode($info);
	echo $info;
}

function reget($body)
{
	$info=array();
	if($body["latest_block"]=="get failed")
	{
		$info["latest_block"]=exec("curl -k -s \"https://api.helium.io/v1/blocks/height\" --connect-timeout 10 | jq .data.height");
		if($info["latest_block"]=="null")
		{
			$info["latest_block"]="get failed";
		}
	}
	else
	{
		$info["latest_block"]=$body["latest_block"];
	}

	if($body["latest_firmware"]=="get failed")
	{
		$info["latest_firmware"]=exec("curl -s  -H 'Cache-Control: no-cache' \"http://minerback.heltec.cn/download/patch/indoor_hotspot_patch_index\" --connect-timeout 3 | tail -1 | awk '{print $1}' | awk -F. '{print $1}' | awk -F- '{print $2}'");
		if($info["latest_firmware"]!="")
		{
			$info["latest_firmware"]="V".$info["latest_firmware"][1].".".$info["latest_firmware"][2].".".$info["latest_firmware"][3];
		}
	}
	else
	{
		$info["latest_firmware"]=$body["latest_firmware"];
	}

	if($body["latest_miner"]=="get failed")
	{
		$info["latest_miner"]=exec("curl -s \"https://quay.io/api/v1/repository/team-helium/miner/tag/?limit=20&page=1&onlyActiveTags=true\" --connect-timeout 3 --write-out '\nHTTP_Response:%{http_code}'| grep -v HTTP_Response | jq -c --arg ARCH \"arm\" '[ .tags[] | select( .name | contains(\"arm\") and contains(\"GA\")) ][0].name' | cut -d'\"' -f2 | awk -F'arm64_' '{print $2}'");
	}
	else
	{
		$info["latest_miner"]=$body["latest_miner"];
	}

	$info=json_encode($info);
	echo $info;
}

function switchregion($body)
{
        $oldregion=exec("sudo cat /root/.func/miner_region");
        $cmd="sudo sed -i \"s/".$oldregion."/".$body["region"]."/g\" /root/.func/miner_region";
	exec($cmd);
	$cmd="sudo cp /root/lora/packet_forwarder/lora_pkt_fwd/global_conf_".$body["region"].".json /root/lora/packet_forwarder/lora_pkt_fwd/global_conf.json";
	exec($cmd);
	exec("sudo systemctl restart lrgateway");
	exec("sudo docker stop miner && sudo docker rm miner");
	exec("sudo killall updateImage.sh");
	exec("sudo /root/.func/updateImage.sh");
	exec("sudo sync");
	$body["region"]=exec("sudo cat /root/.func/miner_region");
	$body=json_encode($body);
	echo $body;
}

function startble($body)
{
	exec("sudo /root/.func/bt_init.sh &");
	echo "{}";
}

function resetminer()
{
	exec("sudo docker stop miner");
	exec("sudo rm -rf /root/miner_data");
	exec("sudo mkdir /root/miner_data");
	exec("sudo killall get_miner_conf.sh");
	exec("sudo /root/.func/get_miner_conf.sh");
	exec("sudo docker start miner");
	exec("sudo sleep 20");
	//exec("sudo killall getHeight.sh");
	//exec("sudo /root/.func/getHeight.sh > /dev/null &");
	//exec("sudo sleep 10");
	echo "{}";
}
function restartminer()
{
	exec("sudo killall get_miner_conf.sh");
	exec("sudo /root/.func/get_miner_conf.sh");
	exec("sudo docker restart miner");
	echo "{}";
}

function loralog($body)
{
	$cmd="sudo cat /var/log/syslog | grep LORA -a | grep \"JSON ".$body["tr"]."\" | tail -".$body["cnt"]." | awk '{print $1\" \"$2\" \"$3\" \"$6\" \"$7\" \"$8}'";
	exec($cmd,$res);
	for ($i=0; $i<count($res); $i++) {
		echo($res[$i]);
		echo "<br>";
	}
}

function passwordset($body){
	$command="sudo htpasswd -b /etc/apache2/.htpasswd HT-M2808 ".$body["password"];
	exec($command,$result);
	echo "{}";
}
function reboot()
{
	$command="sudo reboot";
	echo "{}";	
	exec($command,$result);
}

function poweroff()
{
	$command="sudo poweroff";
	echo "{}";	
	exec($command,$result);
}

function download_image($body)
{
	$cmd="sudo docker images | grep ".$body["image"]." | awk '{print $1}'";
	$res=exec($cmd);

	$cmd="sudo docker images | grep ".$body["image"]." | awk '{print $2}'";
	$name=exec($cmd);

	$cmd="if [ ! -f \"/var/www/html/download_image/"."$name".".tar\" ];then sudo rm /var/www/html/download_image/*.tar;sudo docker save "."$res"." > /var/www/html/download_image/".$name.".tar;fi";
	exec($cmd);
	$res=exec("cd /var/www/html/download_image/ && ls *.tar");
	$info["url"]="download_image/".$res;
	$info=json_encode($info);
	echo $info;
}
function download_snap($body)
{
	$cmd="sudo /root/.func/takesnap.sh";
	$res=exec($cmd);
	//$res="creat snapshot failed";
	if($res=="creat snapshot failed")
	{	
		$info["url"]="error";
		$info=json_encode($info);
		echo $info;
	}
	else
	{	
		$info["url"]="download_snap/".$res;
		$info=json_encode($info);
		echo $info;
	}
}

function restartremote()
{
	exec("sudo systemctl stop mqtt_demo");
	exec("sleep 2");
	exec("sudo systemctl start mqtt_demo");
	$info["info"]="Remote program restarted!";
	$info=json_encode($info);
	echo $info;
}

function diagnostic($body)
{
	$cmd="sudo /root/.func/diagnostic.sh ".$body["diagnostic"]." > /dev/null &";
	exec($cmd);
	echo "{}";
}

function clearlog()
{
	$cmd="sudo /root/.func/clearlog.sh";
	exec($cmd);
	$info=array();
	$info["logsize"]=exec("sudo du -sh /var/log|awk -F' ' '{print $1}'");
	$info["disk_G"]=exec("df -h | grep root | awk '{print $3}'| awk -F\"G\" '{print $1}'");
	$info["disk_p"]=exec("df -h | grep root | awk '{print $5}'| awk -F\"%\" '{print $1}'");
	$info=json_encode($info);
	echo $info;
}
?>

