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

use DrupalCodeGenerator\Application;
use DrupalCodeGenerator\BootstrapHandler;
use DrupalCodeGenerator\Command\GenerateCompletion;
use DrupalCodeGenerator\Command\Navigation;
use DrupalCodeGenerator\GeneratorFactory;

// __DIR__ cannot be used here as it contains a path with symlinks resolved.
$dcg_path = \str_starts_with($argv[0], '/') ?
  $argv[0] : \getcwd() . '/' . $argv[0];

// DCG is installed as composer package.
$autoload_dir = \dirname($dcg_path) . '/..';
if (!\file_exists($autoload_dir . '/autoload.php')) {
  // DCG is installed as composer project.
  $autoload_dir = $autoload_dir . '/vendor';
}

if (!\file_exists($autoload_dir . '/autoload.php')) {
  \fwrite(\STDERR, '[ERROR] Could not locate class loader.' . \PHP_EOL);
  exit(1);
}

$class_loader = require $autoload_dir . '/autoload.php';

$bootstrap_handler = new BootstrapHandler($class_loader);
try {
  $container = $bootstrap_handler->bootstrap();
}
catch (\Exception $exception) {
  \fwrite(\STDERR, '[ERROR] ' . $exception->getMessage() . \PHP_EOL);
  exit(1);
}

$generator_factory = new GeneratorFactory($container->get('class_resolver'));
$generators = $generator_factory->getGenerators();

$application = Application::create($container);

$application->addCommands($generators);
$application->add(new GenerateCompletion());
$application->add(new Navigation());
$application->setDefaultCommand('navigation');

$application->run();
