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

use Honeybee\FrameworkBinding\Silex\Console\App;
use Honeybee\FrameworkBinding\Silex\Console\Command\Config\ListConfig;
use Honeybee\FrameworkBinding\Silex\Console\Command\Crate\CrateInfo;
use Honeybee\FrameworkBinding\Silex\Console\Command\Crate\ListCrates;
use Honeybee\FrameworkBinding\Silex\Console\Command\Crate\MakeCrate;
use Honeybee\FrameworkBinding\Silex\Console\Command\Crate\RemoveCrate;
use Honeybee\FrameworkBinding\Silex\Console\Command\Event\ReplayEvents;
use Honeybee\FrameworkBinding\Silex\Console\Command\Fixture\ImportFixture;
use Honeybee\FrameworkBinding\Silex\Console\Command\Migrate\ListTargets;
use Honeybee\FrameworkBinding\Silex\Console\Command\Migrate\MigrateDown;
use Honeybee\FrameworkBinding\Silex\Console\Command\Migrate\MigrateUp;
use Honeybee\FrameworkBinding\Silex\Console\Command\Migrate\TargetInfo;
use Honeybee\FrameworkBinding\Silex\Console\Command\Project\ConfigureProject;
use Honeybee\FrameworkBinding\Silex\Console\Command\Resource\GenerateCode;
use Honeybee\FrameworkBinding\Silex\Console\Command\Resource\GenerateCommand;
use Honeybee\FrameworkBinding\Silex\Console\Command\Resource\ListResources;
use Honeybee\FrameworkBinding\Silex\Console\Command\Resource\MakeResource;
use Honeybee\FrameworkBinding\Silex\Console\Command\Resource\RemoveResource;
use Honeybee\FrameworkBinding\Silex\Console\Command\Resource\ResourceInfo;
use Honeybee\FrameworkBinding\Silex\Console\Command\Route\ListRoutes;
use Honeybee\FrameworkBinding\Silex\Console\Command\Worker\RunWorker;
use Symfony\Component\Console\Input\ArgvInput;

$basedir = getcwd() ?: dirname(__DIR__);
require_once $basedir.'/vendor/autoload.php';

$appContext = 'console';

$appEnv = (new ArgvInput)->getParameterOption([ '--env', '-e' ], getenv('APP_ENV') ?: 'dev');
$appDebug = (new ArgvInput)->getParameterOption('--debug', getenv('APP_DEBUG') ?: true);
$hostPrefix = (new ArgvInput)->getParameterOption([ '--host', '-h' ], getenv('HOST_PREFIX'));
$localConfigDir = getenv('LOCAL_CONFIG_DIR') ?: '/usr/local/env';

$app = require $basedir.'/app/bootstrap.php';
$app->boot();
$app->flush();

$appCommands = [
    // Config
    ListConfig::CLASS,
    // Crate
    CrateInfo::CLASS,
    ListCrates::CLASS,
    MakeCrate::CLASS,
    RemoveCrate::CLASS,
    // Fixture
    ImportFixture::CLASS,
    // Migrate
    ListTargets::CLASS,
    MigrateDown::CLASS,
    MigrateUp::CLASS,
    TargetInfo::CLASS,
    // Project
    ConfigureProject::CLASS,
    // Replay
    ReplayEvents::CLASS,
    // Resource
    GenerateCode::CLASS,
    GenerateCommand::CLASS,
    ListResources::CLASS,
    MakeResource::CLASS,
    RemoveResource::CLASS,
    ResourceInfo::CLASS,
    // Route
    ListRoutes::CLASS,
    // Worker
    RunWorker::CLASS
];

set_time_limit(0);

$appState = [ ':app' => $app, ':appCommands' => $appCommands ];
$app['honeybee.service_locator']->createEntity(App::CLASS, $appState)->run();
