#!/usr/bin/env php
<?php

use PhpDA\Tools\Container\LoadParametersPass;
use PhpDA\Tools\Container\RegisterConsoleCommandsPass;
use PhpDA\Tools\Container\TaggedGroupsParserPass;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Console\Application;
use Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;

set_time_limit(0);
ini_set('memory_limit', -1);
ini_set('xdebug.max_nesting_level', 4000);

set_error_handler(
    function ($severity, $message, $file, $line) {
        if (error_reporting() & $severity) {
            throw new ErrorException($message, $severity, 2, $file, $line);
        }
    }
);

$autoloadFiles = [
    __DIR__ . '/../vendor/autoload_runtime.php',
    __DIR__ . '/../../../autoload_runtime.php'
];

foreach ($autoloadFiles as $autoloadFile) {
    if (file_exists($autoloadFile)) {
        require_once $autoloadFile;
        break;
    }
}

$container = new ContainerBuilder();
$rootDir = __DIR__ . '/..';
$configDir = $rootDir . '/config';

$loader = new PhpFileLoader($container, new FileLocator($rootDir));
$loader->load($configDir . '/container.php');
$loader->load($configDir . '/container.vendor.php');
$container->addCompilerPass(new RegisterConsoleCommandsPass());
$container->addCompilerPass(new LoadParametersPass());
$container->addCompilerPass(new TaggedGroupsParserPass());
$container->compile();

return function (array $context) use ($container) {
    return $container->get(Application::class);
};
