<?php
header('Content-Type: application/json; charset=utf-8');

function tcp_check($host, $port, $timeout = 2) {
    $start = microtime(true);
    $errno = 0;
    $errstr = '';
    $fp = @fsockopen($host, (int)$port, $errno, $errstr, $timeout);
    $elapsed = round((microtime(true) - $start) * 1000, 2);
    if (!$fp) {
        return [
            'ok' => false,
            'host' => $host,
            'port' => (int)$port,
            'elapsed_ms' => $elapsed,
            'error' => $errstr ?: ('errno=' . $errno),
        ];
    }
    fclose($fp);
    return [
        'ok' => true,
        'host' => $host,
        'port' => (int)$port,
        'elapsed_ms' => $elapsed,
    ];
}

function redis_ping($host, $port, $timeout = 2) {
    $start = microtime(true);
    $errno = 0;
    $errstr = '';
    $fp = @fsockopen($host, (int)$port, $errno, $errstr, $timeout);
    if (!$fp) {
        return [
            'ok' => false,
            'error' => $errstr ?: ('errno=' . $errno),
        ];
    }
    fwrite($fp, "*1\r\n$4\r\nPING\r\n");
    stream_set_timeout($fp, $timeout);
    $response = fgets($fp);
    fclose($fp);
    return [
        'ok' => trim((string)$response) === '+PONG',
        'response' => trim((string)$response),
        'elapsed_ms' => round((microtime(true) - $start) * 1000, 2),
    ];
}

$amdcHost = getenv('AMDC_HOST') ?: 'amdc';
$amdcPort = getenv('AMDC_PORT') ?: '6359';
$admqHost = getenv('ADMQ_HOST') ?: 'admq';
$admqPort = getenv('ADMQ_PORT') ?: '1883';

echo json_encode([
    'service' => 'apusic middleware docker poc',
    'time' => date('c'),
    'chain' => 'ALB-compatible HTTP entry -> PHP-FPM -> AMDC-compatible cache / ADMQ-compatible MQTT',
    'php' => PHP_VERSION,
    'amdc_ping' => redis_ping($amdcHost, $amdcPort),
    'admq_tcp' => tcp_check($admqHost, $admqPort),
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
