#!/usr/bin/env php
<?php
require __DIR__ . '/vendor/autoload.php';

use Elementum\Commands\CommandResolver;
use Elementum\Resolvers\ClassResolver;
use Symfony\Component\Console\Application;

const COMMANDS_FOLDER = "app/Commands";

$ecosystemPaths = CommandResolver::paths();

$application = new Application();

foreach ($ecosystemPaths as $path) {

    /**
     * Si le projet est Elementum, on charge les commandes de Elementum
     * Sinon, on charge les commandes du projet (plugins, thèmes)
     */
    if (__DIR__ == $path) {
        ClassResolver::loadClassesRecursive($path . '/' . COMMANDS_FOLDER, "Elementum\\App\\Commands", function ($class) use ($application, $ecosystemPaths) {
            $application->add(new $class($ecosystemPaths));
        });
    } else {
        if (!is_dir($path)) continue;

        $namespaces = CommandResolver::getNamespaces($path);
        if (!$namespaces) continue;

        foreach ($namespaces as $namespace => $npath) {

            /**
             * Si le projet ne fait pas partie de l'écosystème Elementum, on ne charge pas les commandes
             */
            if (!str_contains($namespace, "Elementum")) continue;

            /**
             * Retrait de l'antislash final du namespace
             */
            $namespace = rtrim($namespace, '\\');
            ClassResolver::loadClassesRecursive($path . '/' . COMMANDS_FOLDER, $namespace . '\\Commands', function ($class) use ($application, $ecosystemPaths) {
                $application->add(new $class($ecosystemPaths));
            });
        }
    }
}
$application->run();
