<?php

use Phalcon\Di\FactoryDefault\Cli as CliDI;
use Phalcon\Loader;

if (PHP_SAPI !== 'cli') {
    echo 'It must be run as a CLI application';
    exit(1);
}

define('BP',dirname(__DIR__));
define('DS','/');
define('CODE',BP.DS.'app'.DS.'code');

define('HOST','https://apps.cedcommerce.com');
require BP.DS.'vendor'.DS.'autoload.php';

$di = new CliDI();
$di->set(
    'loader',
    function () {
        $loader = new Loader();
        return $loader;
    }
);

$loader = $di['loader'];
$loader->registerDirs([ __DIR__ . '/console', ]);
$loader->registerNamespaces( ['App\Core' => CODE.'/core/',]);
$loader->register();
$di->set('registry', new \App\Core\Components\Registry);
$console = new App\Core\ConsoleApplication($di);

$arguments = [];

foreach ($argv as $k => $arg) {
    if ($k === 1) {
        $arguments['task'] = $arg;
    } elseif ($k === 2) {
        $arguments['action'] = $arg;
    } elseif ($k >= 3) {
        $arguments['params'][] = $arg;
    }
}

try {
    $console->handle($arguments);
} catch (\Phalcon\Cli\Router\Exception $e) {
    fwrite(STDERR, $e->getMessage() . $e->getTraceAsString() . PHP_EOL);
    exit(1);
} catch (\Phalcon\Cli\Dispatcher\Exception $e) {
    fwrite(STDERR, $e->getMessage() .$e->getTraceAsString() . PHP_EOL);
    exit(1);
} catch (\Phalcon\Cli\Console\Exception $e) {
    fwrite(STDERR, $e->getMessage() .$e->getTraceAsString() . PHP_EOL);
    exit(1);
}catch (\Phalcon\Exception $e) {
    fwrite(STDERR, $e->getMessage() . $e->getTraceAsString() .PHP_EOL);
    exit(1);
} catch (\Throwable $throwable) {
    fwrite(STDERR, $throwable->getMessage() .$throwable->getTraceAsString() . PHP_EOL);
    exit(1);
} catch (\Exception $exception) {
    fwrite(STDERR, $exception->getMessage() . $exception->getTraceAsString() .PHP_EOL);
    exit(1);
}