<?php
if (php_sapi_name() !== 'cli') exit('It\'s no cli!');

$config = dirname(dirname(dirname(__DIR__))).'/Config/Router.php';

if(is_file($config)) return "\n--- Router configuration file already exists!";
if(!is_dir(dirname($config))) return "\n\n--- Configuration file for Router not instaled!\n\n";

$data = <<<'EOD'
<?php
/**
 * Config\Router
 * PHP version 7
 *
 * @category  Access
 * @package   Config
 * @author    Bill Rocha <prbr@ymail.com>
 * @copyright 2016 Bill Rocha <http://google.com/+BillRocha>
 * @license   <https://opensource.org/licenses/MIT> MIT
 * @version   GIT: 0.0.2
 * @link      http://paulorocha.tk/github/devbr
 */

namespace Config;

/**
 * Config\Router Class
 *
 * @category Access
 * @package  Config
 * @author   Bill Rocha <prbr@ymail.com>
 * @license  <https://opensource.org/licenses/MIT> MIT
 * @link     http://paulorocha.tk/github/devbr
 */
class Router
{

    function routers(&$router)
    {
        $router->respond('get', '/', 'Site\Front::page')
               /*
                  Considere a url:
                    http://localhost/loja/903/Camisa Polo Marca XXX/ldfnld-n0p/+=dlknferçlkm/dsfdfdsjd//

                    Captura:
                        ['id'] => 903
                        ['produto'] => Camisa Polo MArca XXX

                    Ignora tudo mais...

                    Veja a função "teste" da classe em "/.php/Site/Front.php"
                    Segue a configuração da rota, abaixo:
                */
               ->respond('get', '/loja/(?<id>.*?)/(?<produto>[^/]*).*', 'Site\Front::test')
               
                /*  
                    A mesma configuração, porém com parametros (índice) NUMÉRICOS:
                    http://localhost/loja2/903/Camisa Polo Marca XXX/ldfnld-n0p/+=dlknferçlkm/dsfdfdsjd//
                */
                
               ->respond('get', '/loja2/(.*?)/([^/]*).*', 'Site\Front::test');
    }
}

/* Description:

        $router->respond( <type>, <request>, <controller>, [<action>]);
        
            <type>:       A string with the following methods: "all", "get", "post", "delete", "put", "patch". 
                          Or specify a specific group: "get|post|delete".
                          
            <request>:    String of the requested URI - ex.: "about/me" ==> http://site.com/about/me
            
            <controller>: Class (object) to manage the request. 
                          Name must be a complete string, with NAMESPACE + CLASSNAME. Ex.: "Lib\User".
                          Alternatively you can use the following format: "controller::action" - ex.: "Lib\User::login".                          
                          The Controller can also be an anonymous function that receives (or not) 
                          parameters of the regular expression in <request>. 
                          Ex.: $router->respond('get', '/(*)', function($path){exit($path);});
                           -- if request "http://site.com/test/me", print in screen "test/me".
            
            <action>:     Optional form to indicate an action. Ex.: "login"
    
        
        Other Samplers
        ==============
        
        $router->respond('get',  'about', 
            function(){
                \Lib\App::go('http://paulorocha.tk/devbr/about');
            }) //redirect "http://site.com/about"
        ->respond('get|post', 'blog(/\d{4}(/\d{2}(/\d{2}(/[a-z0-9_-]+)?)?)?)?', 'blog1') //blog/2015/11/23/titulo_da_materia
        ->respond('get|post', 'blog(/\d{4}(/\d{2}(/\d{2}(.*)?)?)?)?', 'blog2') //blog/2015/11/23/qualquer coisa aqui
        ->respond('get|post', '/user/(\d+)/(\w+)', 'usuarioIdNome', 'index') //user/00234/Nome do cara
        ->respond('get|post', '/user/(\d+)', 'usuarioId', 'index') //user/09005
        ->respond('get|post', '/user/(\d+)/(\w+)/(\w+)', 'usuarioIdNomeESobrenome', 'index') //user/231/Paulo/Rocha
        ->respond('get|post', '/user/(\d+)/(.*)', 'usuarioIdNomeCompleto', 'index')
        ->respond('get|post', '/user', 'user', 'index') //user
        ->respond('post', 'msg', 'msg')
        
        ->respond('post', 'sendmail/(.*[^<>()[\]\.,;:\s@\"])@(.*[^<>()[\]\.,;:\s@\"])\.(\w+)/(.*)', 'sendmail') //sendmail/prbr@ymail.com/23998  ((POST only)) call \Controller\Sendmail
        
        ->respond('post', 'upfile', 'upfile')
        
        ->respond('get|post', 'controller/(.*?)/(.*?)/(.*)', function($controller, $action, $params) {
            echo'Controller: ' . $controller . '<br>Action: ' . $action . '<br>Params: ' . $params;
            //after process, call controller/action
            return ['controller' => $controller, 'action' => $action, 'params' => 'none'];
        }) //controller/admin/index/values


        ->respond('get|post', 'blogs(/\d{4}(/\d{2}(/\d{2}(/[a-z0-9_-]+)?)?)?)?', function($ano, $mes, $dia, $titulo) {
            echo 'Ano: ' . $ano .
            '<br>Mês: ' . $mes .
            '<br>Dia: ' . $dia .
            '<br>Título: ' . $titulo;
            exit('<br>finish callback!');
            //In this case, the CALLBACK call the Controller/Action or stop...
        }); //Resolve with callback
*/        
EOD;

file_put_contents($config, $data);

return "\n--- Router instaled!";
