#!/usr/bin/env php
<?php declare(strict_types=1);

use NunoMaduro\Collision\Provider;
use Pest\Actions\ValidatesEnvironment;
use Pest\Console\Command;
use Pest\Support\Container;
use Pest\TestSuite;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Output\OutputInterface;

(static function () {
    // Used when Pest is required using composer.
    $vendorPath = dirname(__DIR__, 4) . '/vendor/autoload.php';

    // Used when Pest maintainers are running Pest tests.
    $localPath = dirname(__DIR__) . '/vendor/autoload.php';

    if (file_exists($vendorPath)) {
        include_once $vendorPath;
        $autoloadPath = $vendorPath;
    } else {
        include_once $localPath;
        $autoloadPath = $localPath;
    }

    (new Provider())->register();

    // get $rootPath based on $autoloadPath
    $rootPath =  dirname($autoloadPath, 2);

    $testSuite = TestSuite::getInstance($rootPath);

    $isDecorated = (new ArgvInput())->getParameterOption('--colors', 'always') !== 'never';
    $output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, $isDecorated);

    $container = Container::getInstance();
    $container->add(TestSuite::class, $testSuite);
    $container->add(OutputInterface::class, $output);

    ValidatesEnvironment::in($testSuite);

    exit($container->get(Command::class)->run($_SERVER['argv']));
})();
