#!/usr/bin/php
<?php

require __DIR__."/../config/autoload.php";

use Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper;
use Ministra\Admin\Command\AnalyzingRoutesCommand;
use Ministra\Admin\Command\ClearCacheCommand;
use Ministra\Admin\Command\DeployMigrationsCommand;
use Ministra\Admin\Command\GenerateRoutesCommand;
use Ministra\Admin\Command\UpdateClearUtilCommand;
use Ministra\Admin\Command\UpgradeMigrationsCommand;
use Ministra\Admin\DoctrineServiceProvider;
use Silex\Provider\SerializerServiceProvider;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Helper\HelperSet;
use Symfony\Component\Console\Helper\QuestionHelper;

/** @var $app Silex\Application */
require __DIR__."/../app.php";

$app->register(new SerializerServiceProvider());

$cli = new Application();

/** @var \Doctrine\DBAL\Connection $db */
$db = $app["db"];

$app->register(
    new DoctrineServiceProvider($cli),
    [
        "migrations.directory" => __DIR__."/../src/Migrations",
        "migrations.name" => "Ministra DB Migrations",
        "migrations.namespace" => "Ministra\\Migrations",
        "migrations.table_name" => "changelog",
    ]
);

$helperSet = new HelperSet(
    [
        "connection" => new ConnectionHelper($app["db"]),
        "dialog" => new QuestionHelper(),
    ]
);

require __DIR__.'/../config/boot_app.php';

$cli->setHelperSet($helperSet);
$cli->add((new GenerateRoutesCommand())->setContainer($app[\Psr\Container\ContainerInterface::class]));
$cli->add((new AnalyzingRoutesCommand())->setContainer($app[\Psr\Container\ContainerInterface::class]));
$cli->add((new UpgradeMigrationsCommand())->setContainer($app[\Psr\Container\ContainerInterface::class]));
$cli->add((new DeployMigrationsCommand())->setContainer($app[\Psr\Container\ContainerInterface::class]));
$cli->add((new UpdateClearUtilCommand())->setContainer($app[\Psr\Container\ContainerInterface::class]));
$cli->add((new ClearCacheCommand())->setContainer($app[\Psr\Container\ContainerInterface::class]));
$cli->run();
