TenantAtlas/app/Support/OpsUx/SummaryCountsNormalizer.php
2026-01-18 14:44:16 +01:00

70 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Support\OpsUx;
final class SummaryCountsNormalizer
{
/**
* @param array<string, mixed> $summaryCounts
* @return array<string, int>
*/
public static function normalize(array $summaryCounts): array
{
$allowedKeys = array_flip(OperationSummaryKeys::all());
$sanitized = [];
foreach ($summaryCounts as $key => $value) {
$key = trim((string) $key);
if ($key === '' || ! isset($allowedKeys[$key])) {
continue;
}
if (is_int($value)) {
$sanitized[$key] = $value;
continue;
}
if (is_float($value) && is_finite($value)) {
$sanitized[$key] = (int) round($value);
continue;
}
if (is_numeric($value)) {
$sanitized[$key] = (int) $value;
}
}
return $sanitized;
}
/**
* @param array<string, mixed> $summaryCounts
*/
public static function renderSummaryLine(array $summaryCounts): ?string
{
$normalized = self::normalize($summaryCounts);
if ($normalized === []) {
return null;
}
$parts = [];
foreach ($normalized as $key => $value) {
$parts[] = $key.': '.$value;
}
if ($parts === []) {
return null;
}
return 'Summary: '.implode(', ', $parts);
}
}