<?php
class GrupoDAO{
     private $banco;
     private $auditoria;
     
     static private $tabela = "grupos";
     static private $tabelaId = "idGrupo";
     
     public function __construct() {
         $this->banco = new Banco();
         return;
     }
     
     public function consultaExistenciaPeloSigla($sigla){
         $param["Sigla"] = $sigla;
         $consulta = $this->banco->buscar(self::$tabela, self::$tabelaId.",".self::$auxiliar.", Nome", $param);
         if($consulta){
             return true;
         }else{
             return false;
         }
     }

     
     public function consultar($campos, $param = false, $retorno = "obj", $order = false, $auditoria = false){
         $join  = 'INNER JOIN pessoas ON ';
         $join .= self::$tabela.'.'.self::$tabelaId.' = pessoas.'.self::$tabelaId;        
         if($auditoria){
            $join .= 'LEFT JOIN auditorias ON ';
            $join .= self::$tabela.'.idAuditoria = auditorias.idAuditoria ';    
         }
         
         $busca = $this->banco->buscar(self::$tabela, $campos, $param, $join, $order);
         if(is_array($busca)){
             if($retorno == "obj")  $consulta = self::montarObjeto($busca);
             if($retorno == "json") $consulta = self::montarJSON($busca);
         }else{
             $consulta = false;
         }
         return $consulta;
     }
         
     public function inserir(Grupo $objGrupo){
         $dados["Nome"]               = $objGrupo->getNome();
         $dados["Sigla"]              = $objGrupo->getSigla();
         $dados["Descricao"]          = $objGrupo->getDescricao();
         
         $this->auditoria = new AuditoriaDAO('insere', 'INSERIR GRUPO');
         $dados["idAuditoria"] = $this->auditoria->getUltimoId();
         
         $insere = $this->banco->insere(self::$tabela, $dados, self::$tabelaId);
         if($insere) return $insere; else return false;
     }
     
     public function getTotalGrupos(){
         $campos = "COUNT(idGrupo) as Total";
         $c = $this->banco->buscar(self::$tabela, $campos, array("idGrupo!"=>"0"));
         $total = (int) $c[0]["Total"]; 
         return $total;
     }
     
     /* metodos nao publicos */
     
     private function montarObjeto(array $linha){
         foreach($linha as $ch=>$grupo){
            $Grupo[$ch] = new Grupo($grupo[self::$tabelaId]);
            $Grupo[$ch]->setNome($grupo["Nome"]);
            $Grupo[$ch]->setSigla($grupo["Sigla"]);
            $Grupo[$ch]->setDescricao($grupo["Descricao"]);
        }
        return $Grupo;
     }
     
     private function montarJSON(array $linha){
         $total   = count($linha);
         $cc      = 1;
         $retorno = '{"total":"'.$total.'", "dados":[';
         foreach($linha as $ch=>$grupo){
             
             $retorno .= '{"idgrupo":"'.$grupo[self::$tabelaId].'", ';
             $retorno .= ' "nome":"'.$grupo["Nome"].'", ';
             $retorno .= ' "sigla":"'.$grupo["Sigla"].'", ';
             $retorno .= ' "totalpessoas":"'.$grupo["TotalPessoas"].'", ';
             $retorno .= ' "descricao":"'.$grupo["Descricao"].'" }';
             $cc++;
             if($cc <= $total) $retorno .= ', ';
         }
         $retorno .= ']}';
         return $retorno;
     }
}