<?php
class PessoaDAO{
     private $banco;
     private $auditoria;
     
     static private $tabela = "pessoas";
     static private $tabelaId = "idPessoa";
     static private $auxiliar = "CodAux";
     
     public function __construct() {
         $this->banco = new Banco();
         return;
     }
     
     public function consultaExistenciaPeloNome($Nome, $dtNasc){
         $param["NomeLIKE"]     = $Nome;
         $param["dtNascimento"] = $dtNasc;
         $consulta = $this->banco->buscar(self::$tabela, self::$tabelaId.",".self::$auxiliar.", Nome", $param);
         if($consulta){
             return true;
         }else{
             return false;
         }
     }
     
     public function consultaExistenciaPeloCPF($CPF){
         $param["CPF"]     = $CPF;
         $consulta = $this->banco->buscar(self::$tabela, self::$tabelaId.",".self::$auxiliar.", Nome", $param);
         if($consulta){
             return true;
         }else{
             return false;
         }
     }
     
     public function consultar($campos, $param, $retorno = "obj", $order = false, $auditoria = false){
         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(Pessoa $objPessoa){
         $dados["Nome"]               = $objPessoa->getNome();
         $dados["Sexo"]               = $objPessoa->getSexo();
         $dados["Situacao"]           = $objPessoa->getSituacao();
         $dados["dtNascimento"]       = $objPessoa->getDtNascimento();
         $dados["RG"]                 = $objPessoa->getRG();
         $dados["CPF"]                = $objPessoa->getCPF();
         $dados["NomeConjuge"]        = $objPessoa->getNomeConjuge();
         $dados["TelefoneFixo"]       = $objPessoa->getTelefoneFixo();
         $dados["Celular1"]           = $objPessoa->getCelular1();
         $dados["Celular2"]           = $objPessoa->getCelular2();
         $dados["Email"]              = $objPessoa->getEmail();
         $dados["END_logradouro"]     = $objPessoa->getLogradouro();
         $dados["END_bairro"]         = $objPessoa->getBairro();
         $dados["END_municipio"]      = $objPessoa->getCidade();
         $dados["END_UF"]             = $objPessoa->getUF();
         $dados["END_CEP"]            = $objPessoa->getCEP();
         $dados["TIT_nr"]             = $objPessoa->getNumeroTitulo();
         $dados["TIT_sc"]             = $objPessoa->getSecaoitulo();
         $dados["TIT_zn"]             = $objPessoa->getZonaTitulo();
         $dados["idGrupo"]            = $objPessoa->getGrupo()->getIdGrupo();
         $dados["CodAux"]             = $objPessoa->getCodAux();
         
         $this->auditoria = new AuditoriaDAO('insere', 'INSERIR PESSOA');
         $dados["idAuditoria"] = $this->auditoria->getUltimoId();
         
         $insere = $this->banco->insere(self::$tabela, $dados, self::$tabelaId);
         if($insere) return $insere; else return false;
     }
     
     
     
     public function getTotalPessoas(){
         $campos = "COUNT(idPessoa) as Total";
         $c = $this->banco->buscar(self::$tabela, $campos, array("idPessoa!"=>"0"));
         $total = (int) $c[0]["Total"]; 
         return $total;
     }
     
     /* metodos nao publicos */
     
     private function montarObjeto(array $linha){
         foreach($linha as $ch=>$pessoa){
            $Pessoa[$ch] = new Pessoa($pessoa[self::$tabelaId]);
            $Pessoa[$ch]->setNome($pessoa["Nome"]);
            $Pessoa[$ch]->setSexo($pessoa["Sexo"]);
            $Pessoa[$ch]->setSituacao($pessoa["Situacao"]);
            $Pessoa[$ch]->setDtNascimento($pessoa["dtNascimento"]);
            $Pessoa[$ch]->setImagem($pessoa["Imagem"]);
            $Pessoa[$ch]->setRG($pessoa["RG"]);
            $Pessoa[$ch]->setCPF($pessoa["CPF"]);
            $Pessoa[$ch]->setNomeConjuge($pessoa["NomeConjuge"]);
            $Pessoa[$ch]->setTelefoneFixo($pessoa["TelefoneFixo"]);
            $Pessoa[$ch]->setCelular1($pessoa["Celular1"]);
            $Pessoa[$ch]->setCelular2($pessoa["Celular2"]);
            $Pessoa[$ch]->setEmail($pessoa["Email"]);
            $Pessoa[$ch]->setLogradouro($pessoa["END_logradouro"]);
            $Pessoa[$ch]->setBairro($pessoa["END_bairro"]);
            $Pessoa[$ch]->setCidade($pessoa["END_municipio"]);
            $Pessoa[$ch]->setUF($pessoa["END_UF"]);
            $Pessoa[$ch]->setCEP($pessoa["END_CEP"]);
            $Pessoa[$ch]->setNumeroTitulo($pessoa["TIT_nr"]);
            $Pessoa[$ch]->setSecaoTitulo($pessoa["TIT_sc"]);
            $Pessoa[$ch]->setZonaTitulo($pessoa["TIT_zn"]);
            $Pessoa[$ch]->setCodAux($pessoa["CodAux"]);
            $Pessoa[$ch]->setObservacoes($pessoa["obs"]);
        }
        return $Pessoa;
     }
     
     private function montarJSON(array $linha){
         $total   = count($linha);
         $cc      = 1;
         $retorno = '{"total":"'.$total.'", "dados":[';
         foreach($linha as $ch=>$pessoa){
             if($pessoa["Sexo"] == "M")     $sexo_escrito = "Masculino";
             elseif($pessoa["Sexo"] == "F") $sexo_escrito = "Feminino";
             elseif($pessoa["Sexo"] == "N") $sexo_escrito = "Não informado";
             
             $telefones = '';
             if($pessoa["TelefoneFixo"] != "") $telefones .= $pessoa["TelefoneFixo"];
             if($pessoa["Celular1"] != "")     $telefones .= "/".$pessoa["Celular1"]; 
             if($pessoa["Celular2"] != "")     $telefones .= "/".$pessoa["Celular2"]; 
             
             if($pessoa["Imagem"] == "") $img = "sem_imagem.jpg"; 
             else $img = $pessoa["Imagem"]; 
             
             $retorno .= '{"idpessoa":"'.$pessoa[self::$tabelaId].'", ';
             $retorno .= ' "nome":"'.$pessoa["Nome"].'", ';
             $retorno .= ' "sexo_legenda":"'.$pessoa["Sexo"].'", ';
             $retorno .= ' "sexo":"'.$sexo_escrito.'",';
             $retorno .= ' "imagem":"'.$img.'",';
             $retorno .= ' "telefonefixo":"'.$pessoa["TelefoneFixo"].'", ';
             $retorno .= ' "celular1":"'.$pessoa["Celular1"].'", ';
             $retorno .= ' "celular2":"'.$pessoa["Celular2"].'", ';
             $retorno .= ' "dtnascimento":"'.$pessoa["dtNascimento"].'", ';
             $retorno .= ' "telefones":"'.$telefones.'", ';
             $retorno .= ' "logradouro":"'.$pessoa["END_logradouro"].'", ';
             $retorno .= ' "cidade":"'.$pessoa["END_municipio"].'", ';
             $retorno .= ' "estado":"'.$pessoa["END_UF"].'" }';
             $cc++;
             if($cc <= $total) $retorno .= ', ';
         }
         $retorno .= ']}';
         return $retorno;
     }
}