<?php
declare(strict_types=1);

// Read-only aggregate gate. Never emit connection details or user identifiers.
if (($argv[1] ?? '') !== '--preflight') {
    exit(2);
}
set_exception_handler(static function (Throwable $e): void {
    echo json_encode(['status' => 'halt', 'class' => get_class($e),
        'message_sha256' => hash('sha256', $e->getMessage())]), PHP_EOL;
    exit(3);
});
$path = '/workspace/zhct/zhctproject/ai_api/.env.local';
$sections = parse_ini_file($path, true, INI_SCANNER_RAW);
$store = $sections['DATABASE_ZHCT'] ?? null;
if (!is_array($store) || strtolower((string)($store['TYPE'] ?? '')) !== 'mysql') {
    throw new RuntimeException('local Store database config unavailable');
}
$db = new PDO('mysql:host=' . $store['HOSTNAME'] . ';port=' . (int)$store['HOSTPORT']
    . ';dbname=' . $store['DATABASE'] . ';charset=' . ($store['CHARSET'] ?? 'utf8'),
    $store['USERNAME'], $store['PASSWORD'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_TIMEOUT => 5]);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$identity = $db->query('SELECT DATABASE() AS db_name, @@version AS version')->fetch();
if (!is_array($identity) || $identity['db_name'] !== $store['DATABASE']) {
    throw new RuntimeException('database identity mismatch');
}
$rows = $db->query("SELECT COUNT(*) AS sessions, COUNT(DISTINCT ai_user_id) AS users, "
    . "MIN(start_time) AS earliest, MAX(start_time) AS latest "
    . "FROM ydy_measurement_session WHERE device_type='jump_rope' AND is_valid=1")
    ->fetch();
$metrics = $db->query("SELECT COUNT(*) AS metric_rows, COUNT(DISTINCT r.session_id) AS metric_sessions "
    . "FROM ydy_health_record r JOIN ydy_measurement_session s ON r.session_id=s.session_id "
    . "WHERE s.device_type='jump_rope' AND s.is_valid=1 "
    . "AND r.metric_code IN ('jump_count','activity_duration','calories_burned')")
    ->fetch();
echo json_encode(['status' => 'readonly-preflight', 'source' => 'code-local-dev-mysql',
    'version' => $identity['version'], 'sessions' => (int)$rows['sessions'],
    'users' => (int)$rows['users'], 'metric_rows' => (int)$metrics['metric_rows'],
    'metric_sessions' => (int)$metrics['metric_sessions'],
    'earliest' => $rows['earliest'], 'latest' => $rows['latest']], JSON_UNESCAPED_UNICODE), PHP_EOL;
