<?php

use kernel\App;
use kernel\console\controllers\MigrationController;
use Phroute\Phroute\RouteCollector;

App::$collector->console("hello", [\kernel\console\controllers\MainController::class, "indexAction"]);
App::$collector->console("help", [\kernel\console\controllers\MainController::class, "actionHelp"]);

App::$collector->group(["prefix" => "migration"], callback: function (RouteCollector $router){
    App::$collector->console('run',
        [MigrationController::class, 'actionRun'],
        additionalInfo: ['description' => 'Запуск существующих миграций']
    );
    App::$collector->console('init',
        [MigrationController::class, 'actionCreateMigrationTable'],
        additionalInfo: ['description' => 'Инициализация миграций']
    );
    App::$collector->console('create',
        [MigrationController::class, 'actionCreate'],
        additionalInfo: ['description' => 'Создание миграции', 'params' => ['--name' => 'Название миграции', '--path' => 'Путь по которому будет создана миграция']]
    );
    App::$collector->console('rollback',
        [MigrationController::class, 'actionRollback'],
        additionalInfo: ['description' => 'Откатить миграции']
    );
});

App::$collector->group(["prefix" => "admin-theme"], callback: function (RouteCollector $router){
    App::$collector->console('install',
        [\kernel\console\controllers\AdminThemeController::class, 'actionInstallTheme'],
        additionalInfo: ['description' => 'Установить тему админ-панели', 'params' => ['--path' => 'Путь к устанавливаемой теме']]
    );
    App::$collector->console('uninstall',
        [\kernel\console\controllers\AdminThemeController::class, 'actionUninstallTheme'],
        additionalInfo: ['description' => 'Удалить тему админ-панели', 'params' => ['--path' => 'Путь к удаляемой теме']]
    );
    App::$collector->console('pack',
        [\kernel\console\controllers\AdminThemeController::class, 'actionPackTheme'],
        additionalInfo: ['description' => 'Заархивировать тему админ-панели', 'params' => ['--path' => 'Путь к теме, которую нужно заархивировать']]
    );
});

App::$collector->group(["prefix" => "theme"], callback: function (RouteCollector $router){
    App::$collector->console('install',
        [\kernel\console\controllers\ThemeController::class, 'actionInstallTheme'],
        additionalInfo: ['description' => 'Установить тему сайта', 'params' => ['--path' => 'Путь к устанавливаемой теме']]
    );
    App::$collector->console('uninstall',
        [\kernel\console\controllers\ThemeController::class, 'actionUninstallTheme'],
        additionalInfo: ['description' => 'Удалить тему сайта', 'params' => ['--path' => 'Путь к удаляемой теме']]
    );
    App::$collector->console('pack',
        [\kernel\console\controllers\ThemeController::class, 'actionPackTheme'],
        additionalInfo: ['description' => 'Заархивировать тему сайта', 'params' => ['--path' => 'Путь к теме, которую нужно заархивировать']]
    );
});

App::$collector->group(["prefix" => "secure"], callback: function (RouteCollector $router){
    App::$collector->console('create-secret-key',
        [\kernel\console\controllers\SecureController::class, 'actionCreateSecretKey'],
        additionalInfo: ['description' => 'Генерация секрктного ключа и запись его в .env']
    );
});

App::$collector->group(["prefix" => "admin"], callback: function (RouteCollector $router){
    App::$collector->console('init',
        [\kernel\console\controllers\AdminConsoleController::class, 'actionInit'],
        additionalInfo: ['description' => 'Инициализация админ-панели']
    );
});

App::$collector->group(["prefix" => "module"], callback: function (RouteCollector $router){
    App::$collector->console('install',
        [\kernel\console\controllers\ModuleController::class, 'actionInstallModule'],
        additionalInfo: ['description' => 'Установка модуля', 'params' => ['--path' => 'Путь к устанавливаемому модулю']]
    );
    App::$collector->console('uninstall',
        [\kernel\console\controllers\ModuleController::class, 'actionUninstallModule'],
        additionalInfo: ['description' => 'Удалить модуль', 'params' => ['--path' => 'Путь к удаляемому модулю']]
    );
    App::$collector->console('pack',
        [\kernel\console\controllers\ModuleController::class, 'actionPackModule'],
        additionalInfo: ['description' => 'Заархивировать модуль', 'params' => ['--path' => 'Путь к модулю, который нужно заархивировать']]
    );
    App::$collector->console('update',
        [\kernel\console\controllers\ModuleController::class, 'actionUpdateModule'],
        additionalInfo: ['description' => 'Обновить модуль', 'params' => ['--path' => 'Путь к архиву с модулем']]
    );
    App::$collector->console('construct',
        [\kernel\console\controllers\ModuleController::class, 'actionConstructModule'],
        additionalInfo: ['description' => 'Сгенерировать модуль']
    );
});

App::$collector->group(["prefix" => "kernel"], callback: function (RouteCollector $router){
    App::$collector->console('pack',
        [\kernel\console\controllers\KernelController::class, 'actionPackKernel'],
        additionalInfo: ['description' => 'Заархивировать ядро', 'params' => ['--path' => 'Путь к ядру']]
    );
    App::$collector->console('update',
        [\kernel\console\controllers\KernelController::class, 'actionUpdateKernel'],
        additionalInfo: [
            'description' => 'Обновить модуль',
            'params' =>
                [
                    '--path' => 'Путь к архиву ядра',
                    'bootstrap' => 'Обновить bootstrap',
                    'composer' => 'Обновить composer',
                    'env' => 'Обновить .env.example'
                ]
        ]
    );
});

