#!/usr/bin/env php
<?php
$loader = require(__DIR__ . '/../../vendor/autoload.php');

use Doctrine\Common\Annotations\AnnotationRegistry;
use Silex\Application;
use Silex\Provider as SilexProviders;
use Dflydev\Provider\DoctrineOrm\DoctrineOrmServiceProvider;
use Lokhman\Silex\Console\Console;
use Lokhman\Silex\Console\Command as Commands;
use Lokhman\Silex\Console\Provider as LokhmanProviders;
use Betterschool\Command as BetterschoolCommands;
use Symfony\Component\Yaml\Yaml;

//Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace(
//    'JMS\Serializer\Annotation',
//    __DIR__ . '/../../vendor/jms/serializer/src');
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));

$app = new Application();
$app['debug'] = true;

// read yaml config
$app['betterconfig'] = Yaml::parseFile(__DIR__.'/../config/config.yml');


//$app->register(new SilexProviders\DoctrineServiceProvider());
$app->register(new SilexProviders\DoctrineServiceProvider(), array(
    'db.options' => array(
        'driver'   => 'pdo_mysql',
        'host'      => $app['betterconfig']['db']['host'],
        'dbname'    => $app['betterconfig']['db']['name'],
        'user'      => $app['betterconfig']['db']['user'],
        'password'  => $app['betterconfig']['db']['passwd'],
    ),
));

$app->register(new DoctrineOrmServiceProvider(), [
    'orm.proxies_dir'             => '../entities/Proxy',
    'orm.auto_generate_proxies'   => $app['debug'],
    'orm.em.options'              => [
        'mappings' => [
            [
                'type'                         => 'annotation',
                'namespace'                    => 'Betterschool\\Entity\\',
                'path'                         => 'entities',
                'use_simple_annotation_reader' => false,
            ],
        ],
    ]
]);

/* Services */
$app['basic_service'] = function($app) {
    return new Betterschool\Services\BasicService($app['db'], $app['betterconfig'], $app['orm.em']);
};

$console = new Console($app);

// add console command
$console->add(new Commands\Session\SchemaCreateCommand());
$console->add(new Commands\Cron\TasksCommand());
$console->add(new BetterschoolCommands\ImportMailCommand());

// register console service providers
$console->registerServiceProvider(new LokhmanProviders\DoctrineServiceProvider());
//$console->registerServiceProvider(new LokhmanProviders\DoctrineMigrationsServiceProvider(), [
//'migrations.directory' => __DIR__ . '/../app/migrations',
//'migrations.namespace' => 'Project\Migrations',
//]);

$console->run();