<?php

/*
 * This file is part of Psy Shell.
 *
 * (c) 2012-2025 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Psy\Util;

/**
 * Utility for checking PHP function availability.
 */
class DependencyChecker
{
    /**
     * Check if all functions in a list are available (exist and not disabled).
     *
     * @param string[] $functions List of function names to check
     */
    public static function functionsAvailable(array $functions): bool
    {
        foreach ($functions as $func) {
            if (!\function_exists($func)) {
                return false;
            }
        }

        return empty(self::functionsDisabled($functions));
    }

    /**
     * Check if any functions in a list are disabled.
     *
     * @param string[] $functions List of function names to check
     *
     * @return string[] List of disabled functions
     */
    public static function functionsDisabled(array $functions): array
    {
        $disabled = \array_map('strtolower', \array_map('trim', \explode(',', \ini_get('disable_functions'))));
        $disabledFunctions = \array_intersect($functions, $disabled);

        return $disabledFunctions;
    }
}
