<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
<?php

/*
 * This file is part of the Fidry CPUCounter Config package.
 *
 * (c) Théo FIDRY <theo.fidry@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
declare (strict_types=1);
namespace RectorPrefix202411\Fidry\CpuCoreCounter;

use RectorPrefix202411\Fidry\CpuCoreCounter\Finder\CpuCoreFinder;
use function array_map;
use function explode;
use function implode;
use function max;
use function str_repeat;
use const PHP_EOL;
/**
 * Utility to debug.
 *
 * @private
 */
final class Diagnoser
{
    /**
     * Provides an aggregated diagnosis based on each finders diagnosis.
     *
     * @param list<CpuCoreFinder> $finders
     */
    public static function diagnose(array $finders) : string
    {
        $diagnoses = array_map(static function (CpuCoreFinder $finder) : string {
            return self::diagnoseFinder($finder);
        }, $finders);
        return implode(PHP_EOL, $diagnoses);
    }
    /**
     * Executes each finders.
     *
     * @param list<CpuCoreFinder> $finders
     */
    public static function execute(array $finders) : string
    {
        $diagnoses = array_map(static function (CpuCoreFinder $finder) : string {
            $coresCount = $finder->find();
            return implode('', [$finder->toString(), ': ', null === $coresCount ? 'NULL' : $coresCount]);
        }, $finders);
        return implode(PHP_EOL, $diagnoses);
    }
    private static function diagnoseFinder(CpuCoreFinder $finder) : string
    {
        $diagnosis = $finder->diagnose();
        $maxLineLength = max(array_map('strlen', explode(PHP_EOL, $diagnosis)));
        $separator = str_repeat('-', $maxLineLength);
        return implode('', [$finder->toString() . ':' . PHP_EOL, $separator . PHP_EOL, $diagnosis . PHP_EOL, $separator . PHP_EOL]);
    }
    private function __construct()
    {
    }
}
