<?php
// Déclaration de la fonction de formatage du temps Va2VDC (avant utilisation)
function format_my_time($seconds) {
      $days = floor($seconds / 86400);
      $minutes = floor(($seconds % 3600) / 60);
      $secs = $seconds % 60;
    if ($days > 0) {
         $hours = (floor($seconds / 3600)) - ($days * 24);
        return "{$days}j {$hours}h {$minutes}m";
    } else {
         $hours = floor($seconds / 3600);
       return "{$hours}h {$minutes}m {$secs}s";
      }
}

// Récupération uptime et idletime
$output = shell_exec('cat /proc/uptime');
$cpucores = (int) shell_exec('grep -c processor /proc/cpuinfo');

// Extraction des secondes uptime et idletime (ajoute floor pour arrondir) 
$uptime_seconds = (int) floor(floatval(substr($output, 0, strpos($output, " "))));
$idletime_seconds = (int) floor(floatval(substr($output, strpos($output, " ")+ 1)) / max(1, $cpucores));

// Tes autres récupérations de CPU temp et fréquence ici...
   $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] / 1025) - 5; // Test de temperature   1025 Normal  600 a 5000  -------------------------------------------------  
      }
   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;
      }

   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];
         }
    }

 var audio = new Audio('./sounds/alert.mp3');

    function playAlert() {
	audio.play().catch(function(e){
	console.log("Lecture bloquee par le navigateur :", e);
	});
    }


   function makeLayer(id,L,T,W,H,bgColor,visible,zIndex) {

    var ST = 'position:absolute; text-align:center;padding-top:2px;'
      +'; 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+'">'
    +'⚠ ALERTE CPU ! ⚠ <br> TEMPÉRATURE ÉLEVÉE DÉTECTÉE. <br>'
    +' ⚠ Vérifiez le refroidissement immédiatement ! ⚠ <br>'
    +' ⚠ ALERTE CPU ! ⚠ <br>'
    +'<input type="button" value="Fermer" onclick="deleteLayer(\\\'LYR1\\\')">'
    +'</DIV>';

    document.body.insertAdjacentHTML("beforeend",LR);
    // Lancer le song une fois la fenetre cr//e
    playAlert();
}
  var x = window.innerWidth/2-200;
  var y = window.innerHeight/2-100;

    // Cr/e l>alrete
  makeLayer('LYR1',x,y,400,150,'red',1,1);
 </script>



<!--
    if (document.getElementById) {
       if (document.getElementById(id)) {
          alert ('Layer with this ID already exists!');
       return;
       }
   }


     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-200;
  var y = window.innerHeight/2-100;
  makeLayer('LYR1',x,y,400,150,'red',1,1);
 </script --> 

<?php
	}

	// $output = shell_exec('cat /proc/loadavg');
	// $sysload = substr($output,0,strpos($output," "))*1; // *100 for 1%  or *1 100% */ 

	$output = shell_exec('cat /proc/loadavg'); // charge sur 1, 5, 15 Minutes
	$load = floatval(substr($output,0,strpos($output, " ")));
	$core_count = ((int) shell_exec('nproc')) * 1; // nproc  = 4
	$percent = ($load / $core_count ) * 100; // $core_count
	$sysload = (round($percent,2)) / 3.85; // de 3.5 a 4  pour une bonne estime 
	// $sysload = (sys_getloadavg() / (int) shell_exec("nproc"))*100;


	$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);  
	


	$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);
?>

<?php
    // Détection de la couleur selon la température
    if ($cputemp !== NULL) {
        if ($cputemp < 8) {
                 $tempColor = "white";   // Blanc un Vrais Frigo
        } elseif ($cputemp >= 8 && $cputemp < 26) {
            $tempColor = "cyan";   // Cyan   pour  Température basse
        } elseif ($cputemp >=26 && $cputemp < 34) {
            $tempColor = "LightGreen";   // Vert Clair pour Tres Bon Normal
        } elseif ($cputemp >= 34 && $cputemp < 43) {
            $tempColor = "lime";  // Vert Limee pour  Normal 
        } elseif ($cputemp >= 43 && $cputemp < 50) {
            $tempColor = "yellow";   // Jaune   pour  Avertissement Attention Temp. 
        } elseif ($cputemp >= 50 && $cputemp < 54) {
            $tempColor = "orange";   // Orange   pour  Tres Chaut Attention
        } elseif ($cputemp >= 54 && $cputemp < 58) {
                 $tempColor = "DarkOrange";  // Orange Fonce pour Danger Avertissement Température
        } else {
            $tempColor = "red";     // Rouge  pour  DANGER Haute Température
        }
    }
?>

<?php
    // Détection de la couleur selon la température
    if ($sysload !== NULL) {
        if ($sysload < 2) {
                 $SysColor = "white";   // Blanc un Vrais Frigo
        } elseif ($sysload >= 2 && $sysload < 8) {
            $SysColor = "cyan";   // Cyan   pour  Température basse
        } elseif ($sysload >=8 && $sysload < 16) {
            $SysColor = "LightGreen";   // Vert Clair pour Tres Bon Normal
        } elseif ($sysload >= 16 && $sysload < 32) {
            $SysColor = "lime";  // Vert Limee pour  Normal
        } elseif ($sysload >= 32 && $sysload < 55) {
            $SysColor = "yellow";   // Jaune   pour  Avertissement Attention Temp.
        } elseif ($sysload >= 55 && $sysload < 70) {
            $SysColor = "orange";   // Orange   pour  Tres Chaut Attention
        } elseif ($sysload >= 70 && $sysload < 85) {
                 $SysColor = "DarkOrange";  // Orange Fonce pour Danger Avertissement Température
        } else {
            $SysColor = "red";     // Rouge  pour  DANGER Haute Température
        }
    }
?>

<?php
    if ($cputemp !== NULL) {
        echo '<div class="card" style="background-color:' . $tempColor . '; color: #C0D7EF; box-shadow: 0px 0px 10px 3px #000; padding: 2px; border-radius: 15px;">';
        $cpuTmpStr = number_format($cputemp, 1, '.', '');
    }
?>

 <!-- Standard-Panel-Inhalt -->
<div class="card-header"style="background-color: #282420; font-size: 1.65em; text-shadow: 3px 3px 4px #000; font-weight: bold; border-radius: 15px;">Informations / <?php  echo '<uc style="color: ' . $SysColor . '; font-size: 1.25em; font-weight: bold; text-shadow: 3px 3px 4px #000;"> CPU  </uc>';?>
 / <?php echo '<cp style="color: ' . $tempColor . '; font-size: 1.15em; font-weight: bold; text-shadow: 1px 1px 2px #000; text-align: right;">' . $cpuTmpStr . ' &deg;C</cp>';?></div>

  <!-- Tabelle -->
  <div class="table-responsive" style="background-color: #383430; border-radius: 15px; height: 183px;">
   <table id="sysinfo" class="table table-condensed table-striped table-hover">
    <tbody>
     <tr style="background-color: #A8A4A0; color: #0D0A06; font-size: 1.01em;">

<?php
	if ($cputemp !== NULL) {
?>
      <th col="1">Température</th>
<?php
	}
?>
<?php
	if ($cpufreq !== NULL) {
?>
      <th col="1">Fréquence</th>
<?php
	}
?>
      <th col="1">Char.Sys. </th>	<!--   ChargeSys   -->
      <th col="-8">Utilisation</th>	<!--   Utilisation -->
      <th col="1">Actif.</th>		<!--   En activité -->
      <th col="1">Inact.</th>		<!--   Inactivité  -->
     </tr>
     <tr class="gatewayinfo" style="background-color: #383430; color: #E8E4E0; font-size: 0.95em;">


<?php
    // ... tout ton code plus haut ...
    if ($cputemp !== NULL) {
        $cputempStr = number_format($cputemp, 1, '.', ''); // 1 ou 2 décimales après le point
        echo '<td style="color: ' . $tempColor . '; font-size: 1.55em; font-weight: bold; text-shadow: 1px 1px 2px #000;">' . $cputempStr . ' &deg;C</td>';
    }
?>
    <!-- Autres colonnes ici -->
<?php
	if ($cpufreq !== NULL) {
?>
     <td><?php echo $cpufreq; ?> MHz</td>
<?php
	}
?>

     <!-- tr class="gatewayinfo" style="background-color: #686460; color: #E8E4E0; font-size: 0.9em;" ---*****--- -->
<?php
    // ... tout ton code plus haut ...
    if ($sysload !== NULL) {
        $sysloadStr = number_format($sysload, 1, '.', ''); // 1 ou 2 décimales après le point
        echo '<td style="color: ' . $SysColor . '; font-size: 1.4em; font-weight: bold; text-shadow: 1px 1px 2px #000;">' . $sysloadStr . ' %</td>';
    }
?>
     <td>
<?php
if (defined("SHOWPROGRESSBARS")) {
    // Couleur + statut
    if ($cpuusage < 15) {
        $barClass = "progress-bar-success";
        $statusText = "IDÉAL";
        $textColor = "#4C60E0"; // Bleu Cool
    } elseif ($cpuusage >= 15 && $cpuusage < 35) {
        $barClass = "progress-bar-info";
        $statusText = "NORMALE";
        $textColor = "#4CB044"; // Vert Bon
    } elseif ($cpuusage >= 35 && $cpuusage < 65) {
        $barClass = "progress-bar-warning"; 
        $statusText = "⚠ AVERTISSEMENT";
        $textColor = "#D0C844"; // Jaune-Orange
    } else {
        $barClass = "progress-bar-danger"; // Rouge
        $statusText = "❌ DANGER";
        $textColor = "#E06044"; // Rouge

    // Script pour pop-up récurrent
    echo"
        <script>
           if (typeof window._alerteCPUStarted === 'undefined') {
              window._alerteCPUStarted = true;
              function alerteCPU() {
                 alert('⚠ ALERTE CPU ! Température ÉLEVÉE détectée ($cpuusage%). Vérifiez le refroidissement immédiatement !');
              }
        // Une première alerte tout de suite
              alerteCPU();
        // Puis toutes les 10 secondes tant que la page est affichée
              setInterval(alerteCPU, 10000);
        </script>
       ";
    }
?>
   <div style="border-radius: 5px; background-color: #383430; height: 80px; padding:2px; ">
    <div class="progress"> 
        <div class="progress-bar bg-<?php echo $barClass;?>" 
	    role="progressbar" 
	    aria-valuenow="<?php echo $cpuusage; ?>" 
	    aria-valuemin="0" 
	    aria-valuemax="100" 
	    style="background-color: #BF2F0F; width: <?php echo $cpuusage; ?>%; color: <?php echo $textColor; ?>; padding: 2px; line-height: 20px; text-align: center;">
        </div>
    </div>
    <div class="bar" style="background-color: #C5C9CF; width: 80px; text-shadow: 0px 0px 1px #000; color: <?= $textColor; ?>; font-size: 0.8em; line-height: 20px; /* aligne le texte verticalement  */ text-align: center; padding: 0px 3px; border-radius: 5px;">
	<?php echo $cpuusage; ?> % <br> <?php echo $statusText; ?>
    </div>
   </div>

<?php
} else {
    echo $cpuusage." %";
}
?>
     </td>
     <td><?php echo format_my_time($uptime_seconds); ?></td>
     <td><?php echo format_my_time($idletime_seconds); ?></td>
    </tr>
   </tbody>
  </table>

 </div>
</div>
