<?php
use Eae\Exception\InvalidConfigurationException;

class GenericController extends Controller{

	/*
	| Default controller - grabs all unattended routes and tries to fulfill
    | the request by looking to the backoffice generic pages
	*/
    
    public function getIndex(){
        return $this->missingMethod();    
    }
    
    public function missingMethod($parameters = array())
    {
    

        $uri = '/' . implode('/', $parameters);
        
        //If root, $parameters comes with 2 empty strings (don't know why) so we improvise
        $uri = $uri == '//' ? '/' : $uri;

        $websiteObject = WebsiteObject::whereRaw("? like concat(uri, '/%')", array($uri . '/'))
            ->whereNotNull('template')
            ->orderByRaw("(length( uri ) - length( replace(uri, '/', ''))) desc")
            ->orderByRaw("length(uri) desc")
            ->first();
 
        if (!$websiteObject) {
            App::abort(404); 
        }
        
        $object = $websiteObject->objectable;
        $contentType = $websiteObject->content_type;
        $templateId = $websiteObject->template;
       
        $template = Config::get('backoffice/generic/' . $contentType . '.templates.' . $templateId);
        
        if (!$template) {
            throw new InvalidConfigurationException("You must provide a configuration");
        }
        
        $allowedParameters = 0;
        if (isset($template['parameters'])) {
            $allowedParameters = $template['parameters'];
        }
        $inputParameters = sizeof(explode('/', $uri)) - sizeof(explode('/', $websiteObject->uri));
      
        if ($allowedParameters < $inputParameters) {
            App::abort(404); 
        }
        
        if ($inputParameters > 0 && isset($template['detailView'])) {
            $view = $template['detailView']; 
        } else {
            $view = $template['view'];
        }

        $view = View::make($view)
            ->with(array(
                'object'     => $object,
                'parameters' => $parameters
            ));

        if($object->id == 8) {
            $cookie = Cookie::make('ffms-first', 'play', 40000);
            return Response::make($view)->withCookie($cookie);
        }

        return Response::make($view);
    }
}
