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

use Phabalicious\AppKernel;
use Phabalicious\Command\SelfUpdateCommand;
use Phabalicious\Utilities\Logger;
use Phabalicious\Utilities\PluginDiscovery;
use Phabalicious\Utilities\Utilities;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Debug\Debug;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Output\ConsoleOutputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;

set_time_limit(0);

$autoloaders = [
  __DIR__ . '/../../../autoload.php',
  __DIR__ . '/../vendor/autoload.php'
];

foreach ($autoloaders as $autoloader) {
  if (file_exists($autoloader)) {
    require_once $autoloader;
  }
}

if (file_exists(__DIR__.'/../.env')) {
    (new Dotenv())->load(__DIR__ . '/../.env');
}

$input = new ArgvInput();
$env = $_SERVER['APP_ENV'] ?? 'prod';
$debug = ($input->hasParameterOption('-vvvv', true));

if ($debug) {
    umask(0000);

    if (class_exists(Debug::class)) {
        Debug::enable();
    }
}

$kernel = new AppKernel($env, $debug);
$kernel->boot();
$container = $kernel->getContainer();

/** @var \Symfony\Component\Console\Output\OutputInterface $output */
$output = $container->get(ConsoleOutput::class);
//$output->setVerbosity(OutputInterface::VERBOSITY_DEBUG);

/** @var Application $application */
$application = $container->get(Application::class);

/** @var EventDispatcher $dispatcher */
$dispatcher = $container->get(EventDispatcher::class);
$application->setDispatcher($dispatcher);
SelfUpdateCommand::registerListener($dispatcher);

$application->setVersion(Utilities::FALLBACK_VERSION);
$application->setName('phabalicious');
$application->setDefaultCommand('list');
PluginDiscovery::discoverFromFabfile($container, $output);

$application->run($input, $output);
