<?php namespace Eae;

use Illuminate\Support\ServiceProvider;
use Eae\RequestContext;
use League\Fractal;  
use Eae\Transformation\TransformService;
use Eae\Backoffice\Generic\ContentTypes;
use Eae\Html\FormBuilder;
use Eae\Backoffice\Generic\MenuFormBuilder;

 

class EaeServiceProvider extends ServiceProvider{
    
    protected $defer = true;
    
    public function register()
    {

        $this->app->singleton('RequestContext', function()
        {
            return new RequestContext();
        });  
        
        /* $this->app->bindShared('TransformManager', function()
        {
            return new Fractal\Manager();
        });
         */
        $this->app->bindShared('TransformService', function(){
            
            return new TransformService();    
        });
        
        $this->app->bindShared('Formatter', function()
        {
            return new Support\Formatter();
        });
        
        $this->app->singleton('ContentTypes', function()
        {
            return new ContentTypes();
        });
        
        $this->app->bindShared('FormBuilder', function($app)
        {
            $form = new FormBuilder($app['html'], $app['url'], $app['session.store']->getToken());
            return $form->setSessionStore($app['session.store'])->setInput($app['request']);
        });
        
        $this->app->bindShared('MenuFormBuilder', function()
        {
            return new MenuFormBuilder();
        });
        
       
    }
    
    public function provides()
    {
        return array(
            'RequestContext', 
            'TransformService', 
            'Formatter', 
            'ContentTypes',
            'FormBuilder',
            'MenuFormBuilder'
            );
    }
   
}
