<?php
use Moussaka\Bin\Core\Kernel\Kernel;
use Moussaka\Bin\Core\Container\Container;
use Moussaka\Bin\Core\Request\Request;
use Moussaka\Bin\Core\Router\Router;
use Moussaka\Bin\Core\ACL\ACL;
use Moussaka\Bin\Core\Lib\JSCompiler\JSCompiler;
use DebugBar\DataCollector\MessagesCollector;
if(FALSE){
    /* @var Twig_Environment[] $c */
    $c[ 'twig' ];
    /* @var \DebugBar\StandardDebugBar[] $c */
    $c[ 'debugBar' ];
    $c[ 'conf' ] = include 'Bin/Conf/conf.php';
}

function c($whut){
    global $c;
        //ddd($c->user);
    if($c->user->getLogin() !== 'val'){
        return;
        die('dernier test après c"est bon');
//        return;
    }
//    return;
    if($whut instanceof Moussaka\Model\Entity\Entity){
        $whut = $whut->toArray();
    }
    if( is_array($whut) ){
        foreach($whut as $w){
            c($w);
        }
    }
    $out = str_repeat(PHP_EOL,50) .  strip_tags(preg_replace('/<style>.*<\/style>/','', html_entity_decode(@s($whut))));

    file_put_contents('/tmp/moussaka', $out);
}
$fmk->setConf('Bin/Conf/conf.php');
//if('dev' === ENV){
/* @var \DebugBar\StandardDebugBar[] $c */
$c[ 'debugBar' ] = new \DebugBar\StandardDebugBar();
//}

//twig (No cache id ENV==='dev')


$c[ 'twig' ] = new Twig_Environment(
    new Twig_Loader_Filesystem(
        get_include_path() . '/View/',
        1 == 1? ['cache' => get_include_path() . '/View/Cache']: []
    ));

$c[ 'twig' ]->addExtension(new Bes\Twig\Extension\MobileDetectExtension());
/* @var \Moussaka\Bin\Core\Helper\Helpers[] $c */
$c[ 'H' ] = new Moussaka\Bin\Core\Helper\Helpers;
/* @var \Moussaka\Bin\Core\Helper\Introspection[] $c */
$c[ 'Introspection' ] = new Moussaka\Bin\Core\Helper\Introspection;
/* @var Request[] $c */
$c[ 'req' ] = Request::getInstance();
$c->scope('EM', function (){
    return new \Moussaka\Bin\Core\ORM\EntityManager;
});

$c->scope('mail',function(){





    $mail = new \PHPMailer;
    $mail->CharSet = 'UTF-8';

    $mail->SMTPDebug = 0;                               // Enable verbose debug output
    global $c;
    $mail->isSMTP();
    $mail->Host = $c['conf']['mail'][0]['smtp'];  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = $c['conf']['mail'][0]['adress'];                 // SMTP username
    $mail->Password = $c['conf']['mail'][0]['password'];                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = $c['conf']['mail'][0]['port'];
    return $mail;






});
if(FALSE){// type hint...
    /* @var \Moussaka\Bin\Core\ORM\EntityManagerHint[] $c */
    $c[ 'EM' ] = new \Moussaka\Bin\Core\ORM\EntityManagerHint();
}

/* @var \DebugBar\DataCollector\PDO\TraceablePDO[] $c */
$c['PDO'] = 'dev' === ENV?
    new DebugBar\DataCollector\PDO\TraceablePDO(
        new \PDO('mysql:host=' . $c[ 'conf' ][ 'db' ][ 'host' ] . ';dbname=' . $c[ 'conf' ][ 'db' ][ 'name' ] . ';charset=utf8', $c[ 'conf' ][ 'db' ][ 'user' ], $c[ 'conf' ][ 'db' ][ 'password' ])
    ):
    new \PDO('mysql:host=' . $c[ 'conf' ][ 'db' ][ 'host' ] . ';dbname=' . $c[ 'conf' ][ 'db' ][ 'name' ] . ';charset=utf8', $c[ 'conf' ][ 'db' ][ 'user' ], $c[ 'conf' ][ 'db' ][ 'password' ]);
/* @var \Moussaka\Bin\Core\ORM\ORM[] $c */
$c[ 'ORM' ] = new \Moussaka\Bin\Core\ORM\ORM($c['PDO']);
if('dev' === ENV){
    $c['PDO']->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $c['PDO']->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

   // $c[ 'debugBar' ]->addCollector(new DebugBar\DataCollector\RequestDataCollector());
    $c[ 'debugBar' ]->addCollector(new DebugBar\DataCollector\PDO\PDOCollector($c['PDO']));
    $c[ 'debugBar' ]->addCollector(new MessagesCollector('EM'));
}
$c->alias('debugBar', 'dbg');


if(FALSE){
    /* @var MessagesCollector[] $c */
    $c[ 'dbg.EM' ];
    /* @var \MartynBiz\PHPDebugBar[] $c */
    $c[ 'dbg' ];
}


$c['R'] = new Router($c->req);
$c['ACL'] = new ACL(
    ACL::getUserFromSession() ? ACL::getUserFromSession() : new \Moussaka\Model\Entity\User());

$c->R->setAcl($c->ACL);
$c->twig->addGlobal('R',$c->R);

$c->twig->addGlobal('H',$c->H);











//$c['dbg.EM']->critical('nonononon !!!');


//ACL::logFromToken();
//(new Router(new Request))->execute();
//Router::compileConf();

