<?php
declare(strict_types=1);
$path = $argv[1] ?? '';
if (!is_file($path) || is_link($path)) exit(78);
$summary = ['queries' => 0, 'requests' => 0, 'zero_query_requests' => 0,
    'fatal_requests' => 0, 'fingerprints' => [], 'callsites' => [], 'source_hashes' => [], 'scenarios' => []];
foreach (file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
    $event = json_decode($line, true);
    if (!is_array($event)) throw new RuntimeException('Malformed event');
    $scenario = $event['scenario'];
    if ($event['kind'] === 'request_end') {
        ++$summary['requests'];
        if ($event['observed_queries'] === 0) ++$summary['zero_query_requests'];
        if ($event['fatal']) ++$summary['fatal_requests'];
        $summary['scenarios'][$scenario]['requests'] = ($summary['scenarios'][$scenario]['requests'] ?? 0) + 1;
        continue;
    }
    if ($event['kind'] !== 'query_observed') throw new RuntimeException('Unexpected event');
    ++$summary['queries'];
    $summary['fingerprints'][$event['fingerprint']] = $event['operation'];
    foreach ($event['callsites'] as $site) $summary['callsites'][$site] = true;
    foreach (($event['source_hashes'] ?? []) as $file => $sha) $summary['source_hashes'][$file] = $sha;
    $summary['scenarios'][$scenario]['queries'] = ($summary['scenarios'][$scenario]['queries'] ?? 0) + 1;
}
ksort($summary['callsites']); ksort($summary['fingerprints']); ksort($summary['source_hashes']);
$summary['unique_fingerprints'] = count($summary['fingerprints']);
$summary['unique_trace_locations'] = count($summary['callsites']);
$summary['event_file_sha256'] = hash_file('sha256', $path);
echo json_encode($summary, JSON_UNESCAPED_SLASHES), "\n";
