<?php
//session_start();
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
include "config/config.php";

if (!defined("LOCALE"))
   define("LOCALE", "en_GB");
include "locale/".LOCALE."/settings.php";
$codeset = "UTF8";
putenv('LANG='.LANG_LOCALE.'.'.$codeset);
putenv('LANGUAGE='.LANG_LOCALE.'.'.$codeset);
bind_textdomain_codeset('messages', $codeset);
bindtextdomain('messages', dirname(__FILE__).'/locale/');
setlocale(LC_ALL, LANG_LOCALE.'.'.$codeset);
textdomain('messages');

include "include/tools.php";
include "include/functions.php";

$mmdvmconfigs = getMMDVMConfig();
if (!defined("MMDVMLOGPREFIX"))
   define("MMDVMLOGPREFIX", getConfigItem("Log", "FileRoot", $mmdvmconfigs));
if (!defined("TIMEZONE"))
   define("TIMEZONE", "UTC");
$logLinesMMDVM = getMMDVMLog();
$reverseLogLinesMMDVM = $logLinesMMDVM;
rsort($reverseLogLinesMMDVM);
if ($_GET['section'] == "mode") {
   $mode = getActualMode(getLastHeard($reverseLogLinesMMDVM, TRUE), $mmdvmconfigs);
   echo $mode;
}
if ($_GET['section'] == "lastHeard") {
   $lastHeardList = getLastHeard($reverseLogLinesMMDVM, FALSE);
   $lastHeard = Array();
   for ($i = 0; $i < count($lastHeardList); $i++) {
      $listElem = $lastHeardList[$i];
      // Generate a canonicalized call for QRZ and name lookups
      $call_canon = preg_replace('/\s+\w$/', '', $listElem[2]);
      if (defined("ENABLEXTDLOOKUP")) {
      	 $listElem[11] ="";
         array_push($lastHeard, $listElem);
      } else {
         $listElem[10] ="";
         array_push($lastHeard, $listElem);
      }
   }
   echo '{"data": '.json_encode($lastHeard)."}";
}
/*
   for ($i = 0; $i < count($localTXList); $i++) {
     $listElem = $localTXList[$i];
   if (defined("ENABLEXTDLOOKUP")) {
   	 $listElem[11] =""; 
   } else {
   	 $listElem[10] ="";
   }
   echo '{"data": '.json_encode($lastHeard)."}";
}*/
if ($_GET['section'] == "localTx") {
   $localTXList = getHeardList($reverseLogLinesMMDVM, FALSE);
   $lastHeard = Array();
   for ($i = 0; $i < count($localTXList); $i++) {
      $listElem = $localTXList[$i];
      // Generate a canonicalized call for QRZ and name lookups
      $call_canon = preg_replace('/\s+\w$/', '', $listElem[2]);
      if (defined("ENABLEXTDLOOKUP")) {
      	 $listElem[11] ="";
         if ($listElem[6] == "RF" && ($listElem[1]=="D-Star" || startsWith($listElem[1], "DMR") || $listElem[1]=="YSF" || $listElem[1]=="P25")) {
            $listElem[3] = getName($call_canon);
            if ($listElem[2] !== "??????????") {
               if (!is_numeric($listElem[2])) {
                  if (defined("SHOWQRZ")) {
                     $listElem[2] = "<a target=\"_new\" href=\"https://qrz.com/db/$call_canon\">".str_replace("0","&Oslash;",$listElem[2])."</a>";
                  } else {
                     $listElem[2] = "<a target=\"_new\" href=\"http://dmr.darc.de/dmr-userreg.php?callsign=$call_canon\">".$listElem[2]."</a>";
                  }
               } else {
                  $listElem[2] = "<a target=\"_new\" href=\"http://dmr.darc.de/dmr-userreg.php?usrid=$listElem[2]\">".$listElem[2]."</a>";
               }
            }
            array_push($lastHeard, $listElem);
         }
      } else {
          $listElem[10] ="";
         if ($listElem[5] == "RF" && ($listElem[1]=="D-Star" || startsWith($listElem[1], "DMR") || $listElem[1]=="YSF" || $listElem[1]=="P25")) {
            if ($listElem[2] !== "??????????") {
               if (!is_numeric($listElem[2])) {
                  if (defined("SHOWQRZ")) {
                     $listElem[2] = "<a target=\"_new\" href=\"https://qrz.com/db/$call_canon\">".str_replace("0","&Oslash;",$listElem[2])."</a>";
                  } else {
                     $listElem[2] = "<a target=\"_new\" href=\"http://dmr.darc.de/dmr-userreg.php?callsign=$call_canon\">".$listElem[2]."</a>";
                  }
               } else {
                  $listElem[2] = "<a target=\"_new\" href=\"http://dmr.darc.de/dmr-userreg.php?usrid=$listElem[2]\">".$listElem[2]."</a>";
               }
            }
            array_push($lastHeard, $listElem);
         }
      }
   }
   echo '{"data": '.json_encode($lastHeard)."}";
}

if ($_GET['section'] == "sysinfo") {
   $cputemp = NULL;
   $cpufreq = NULL;
   if (file_exists ("/sys/class/thermal/thermal_zone0/temp")) {
      exec("cat /sys/class/thermal/thermal_zone0/temp", $cputemp);
      $cputemp = $cputemp[0] / 1000;
   }
   showLapTime("cputemp");
   if (file_exists ("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq")) {
      exec("cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", $cpufreq);
      $cpufreq = $cpufreq[0] / 1000;
   }
   showLapTime("cpufreq");

   if (defined("TEMPERATUREALERT") && $cputemp > TEMPERATUREHIGHLEVEL && $cputemp !== NULL) {
?>
      <script>
         function deleteLayer(id) {
            if (document.getElementById && document.getElementById(id)) {
               var theNode = document.getElementById(id);
               theNode.parentNode.removeChild(theNode);
            }
            else if (document.all && document.all[id]) {
               document.all[id].innerHTML='';
               document.all[id].outerHTML='';
            }
            // OBSOLETE CODE FOR NETSCAPE 4
            else if (document.layers && document.layers[id]) {
               document.layers[id].visibility='hide';
               delete document.layers[id];
            }
         }

         function makeLayer(id,L,T,W,H,bgColor,visible,zIndex) {
            if (document.getElementById) {
               if (document.getElementById(id)) {
                  alert ('Layer with this ID already exists!');
                  return;
               }
               var ST = 'position:absolute; text-align:center;padding-top:20px;'
               +'; left:'+L+'px'
               +'; top:'+T+'px'
               +'; width:'+W+'px'
               +'; height:'+H+'px'
               +'; clip:rect(0,'+W+','+H+',0)'
               +'; visibility:'
               +(null==visible || 1==visible ? 'visible':'hidden')
               +(null==zIndex  ? '' : '; z-index:'+zIndex)
               +(null==bgColor ? '' : '; background-color:'+bgColor);

               var LR = '<DIV id='+id+' style="'+ST+'">CPU-Temperature is very high!<br><input type="button" value="Close" onclick="deleteLayer(\'LYR1\')"></DIV>';

               if (document.body) {
                  if (document.body.insertAdjacentHTML)
                     document.body.insertAdjacentHTML("BeforeEnd",LR);
                  else if (document.createElement && document.body.appendChild) {
                     var newNode = document.createElement('div');
                     newNode.setAttribute('id',id);
                     newNode.setAttribute('style',ST);
                     document.body.appendChild(newNode);
                  }
               }
            }
         }
         var audio = new Audio('sounds/alert.mp3');
         audio.play();
         var x = window.innerWidth/2-100;
         var y = window.innerHeight/2-50;

         makeLayer('LYR1',x,y,200,100,'red',1,1);
      </script>
<?php
   }

   $output = shell_exec('cat /proc/loadavg');
   $sysload = substr($output,0,strpos($output," "))*100;
   showLapTime("sysload");
   $stat1 = file('/proc/stat');
   sleep(1);
   $stat2 = file('/proc/stat');
   $info1 = explode(" ", preg_replace("!cpu +!", "", $stat1[0]));
   $info2 = explode(" ", preg_replace("!cpu +!", "", $stat2[0]));
   $dif = array();
   $dif['user'] = $info2[0] - $info1[0];
   $dif['nice'] = $info2[1] - $info1[1];
   $dif['sys'] = $info2[2] - $info1[2];
   $dif['idle'] = $info2[3] - $info1[3];
   $total = array_sum($dif);
   $cpu = array();
   foreach($dif as $x=>$y) $cpu[$x] = round($y / $total * 100, 1);
   $cpuusage = round($cpu['user'] + $cpu['sys'], 2);
   showLapTime("cpuusage");

   $output = shell_exec('grep -c processor /proc/cpuinfo');
   $cpucores = $output;

   $output = shell_exec('cat /proc/uptime');
   $uptime = format_time(substr($output,0,strpos($output," ")));
   $idletime = format_time((substr($output,strpos($output," ")))/$cpucores);
   showLapTime("idletime");

   if (defined("SHOWPOWERSTATE")) {
      $pinStatus = trim(shell_exec("gpio -g read ".POWERONLINEPIN)); // Pin 18
   }
   //returns 0 = low; 1 = high
?>
<tbody>
            <tr>
               <?php
               if (defined("SHOWPOWERSTATE")) {
               ?>
               <th><?php echo _("Power"); ?></th>
               <?php
               }
               if ($cputemp !== NULL) {
               ?>
               <th><?php echo _("CPU-Temperature"); ?></th>
               <?php
               }
               if ($cpufreq !== NULL) {
               ?>
               <th><?php echo _("CPU-Frequency");?></th>
               <?php
               }
               ?>
               <th><?php echo _("System-Load"); ?></th>
               <th><?php echo _("CPU-Usage"); ?></th>
               <th><?php echo _("Uptime"); ?></th>
               <th><?php echo _("Idle"); ?></th>
            </tr>
            <tr class="gatewayinfo">
               <?php
               if (defined("SHOWPOWERSTATE")) {
               ?>
               <td><?php if ($pinStatus == POWERONLINESTATE ) {echo _("online");} else {echo _("on battery");} ?></td>
               <?php
               }
               if ($cputemp !== NULL) {
               ?>
               <td><?php echo $cputemp; ?> &deg;C</td>
               <?php
               }
               if ($cpufreq !== NULL) {
               ?>
               <td><?php echo $cpufreq; ?> MHz</td>
               <?php
               }
               ?>
               <td><?php echo $sysload; ?> %</td>
               <td>
<?php
   if (defined("SHOWPROGRESSBARS")) {
?>
                  <div class="progress"><div class="progress-bar <?php
      if ($cpuusage < 30)
         echo "progress-bar-success";
      if ($cpuusage >= 30 and $cpuusage < 60)
         echo "progress-bar-warning";
      if ($cpuusage >= 60)
         echo "progress-bar-danger";
?>" role="progressbar" aria-valuenow="<?php echo $cpuusage; ?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo intval($cpuusage); ?>%;"><?php echo $cpuusage; ?>%</div></div>
<?php
   } else {
      echo $cpuusage." %";
   }
?>
               </td>
               <td><?php echo $uptime; ?></td>
               <td><?php echo $idletime; ?></td>
            </tr>
         </tbody>
<?php
}
?>