<?php

/**
 * Jilo components status checks
 *
 * This page ("status") checks the status of various Jilo platform components
 * by fetching data from agents and determining their availability.
 * It generates output for each platform and agent.
 */

// Get any new messages
include '../app/includes/messages.php';
include '../app/includes/messages-show.php';

require '../app/classes/agent.php';
$agentObject = new Agent($dbWeb);

include '../app/templates/status-server.php';

// loop through all platforms to check their agents
foreach ($platformsAll as $platform) {

    // check if we can connect to the jilo database
    $response = connectDB($config, 'jilo', $platform['jilo_database'], $platform['id']);
    if ($response['error'] !== null) {
        $jilo_database_status = $response['error'];
    } else {
        $jilo_database_status = 'OK';
    }

    include '../app/templates/status-platform.php';

    // fetch agent details for the current platform
    $agentDetails = $agentObject->getAgentDetails($platform['id']);
    foreach ($agentDetails as $agent) {
        $agent_url = parse_url($agent['url']);
        $agent_protocol = isset($agent_url['scheme']) ? $agent_url['scheme']: '';
        $agent_host = isset($agent_url['host']) ? $agent_url['host']: '';
        $agent_port = isset($agent_url['port']) ? $agent_url['port']: '';

        // we get agent data to check availability
        $agent_response = $agentObject->fetchAgent($agent['id'], true);
        $agent_data = json_decode($agent_response);

        // determine agent availability based on response data
        if (json_last_error() === JSON_ERROR_NONE) {
            $agent_availability = 'unknown';
            foreach ($agent_data as $key => $value) {
                if ($key === 'error') {
                    $agent_availability = $value;
                    break;
                }
                if (preg_match('/_state$/', $key)) {
                    if ($value === 'error') {
                        $agent_availability = 'not running';
                        break;
                    }
                    if ($value === 'running') {
                        $agent_availability = 'running';
                        break;
                    }
                }
            }
        } else {
            $agent_availability = 'json error';
        }

        include '../app/templates/status-agent.php';
    }
    echo '</div>';
    echo '</div>';
}
?>