<?php
require_once 'ajax_config.php';

/**
 * Tipo de Requisição. 
 * Pode ser para alterar itens dos dados do Menu
 * ou para atender um click no menu
 */
$tipoReq    = (string) filter_input(INPUT_GET, 'tipoReq'); 

$model      = (string) filter_input(INPUT_GET, 'model');
$acao       = (string) filter_input(INPUT_GET, 'acao');
$registro   = (string) filter_input(INPUT_GET, 'registro');
$parametros = (array) filter_input_array(INPUT_GET, 'param');
$retorno    = (string) filter_input(INPUT_GET, 'retorno');

/* Caso este servico seja chamado pelo angular */
if($model == ""){
    $request  = json_decode(file_get_contents('php://input'));
    $model    = $request->model;
    $acao     = $request->acao;
    $registro = $request->registro;
}

if(function_exists("$model")) {
    $model();
}else{
   echo json_encode(array('priErroMsg'=>'O metodo chamado não existe', 'metodo'=>$model));
}

/* funcoes especificas */
function Menu(){
    global $acao;
    $acao();
}
function Modulo(){
    global $acao, $registro, $parametros;
    switch($acao){
        case 'mudarModuloAtual':
            $ModuloM = new ModuloM('AJAX');
            $chg = $ModuloM->mudarModuloAtual($registro);
            if($chg) retorno('MudarModulo', 1);
    }
}
function Pessoas(){
    global $tipoReq, $acao;
    if($tipoReq == 'carregarPagina'){
        carregarPagina($acao);
    }
}

/* Funcoes do Model Menu */
function getMenu(){
    $MenuM = new MenuM('AJAX');
    $retorno = $MenuM->getMenu('h_array');
    if(is_array($retorno)){
        $menu = gerarHierarquia($retorno);
    }else{
        $menu = false;
    }
    print json_encode($menu);
}


function gerarHierarquia( array $menuTotal , $idPai = 0){
    foreach($menuTotal[$idPai] as $idMenu=>$menuItem){       
        $menuItem instanceof Menu;
        $r[$idMenu] = array('id'=>$menuItem->getIdMenu(),
                     'nome'=>$menuItem->getNome(),
                     'link'=>$menuItem->getLink());
        if( isset( $menuTotal[$idMenu] ) ) {
            $r[$idMenu]['filhos'] = gerarHierarquia( $menuTotal , $idMenu);
        }
    }
    return $r;
}

function carregarPagina($pag){
    global $model;
    $p = APP.'view/pages/'.$model.'/'.$pag.'.html';
    retorno('CarregarPag', $p);
}
/* Definindo os retornos de função */
function retorno($callback, $retorno){
    print json_encode(array('callback'=>$callback, 'retorno'=>$retorno));
}