<?php
class UsuarioDAO{
    private static $tabela = 'usuarios';
    private static $seq    = 'idUsuario';
    
    private $banco;
    private $audit;
    
    public function __construct() {
        $this->banco = new Banco();
    }
    
    public function busca($param, $tipo_retorno = 'obj', $auditoria = false){
        
        $join  = 'INNER JOIN pessoas ON '.self::$tabela.'.idPessoa = pessoas.idPessoa ';
        $join .= 'INNER JOIN niveis ON '.self::$tabela.'.idNivel = niveis.idNivel ';
        
        if($auditoria){
          $this->audit = new AuditoriaDAO('CONSULTA', false);
          $join .= 'LEFT JOIN auditorias ON ';
          $join .= self::$tabela.'.idAuditoria = auditorias.idAuditoria ';
        }
        
        if(is_array($param)){
            $where = $param;
        }else{
            $where = false;         
        }
        
        $campos  = 'pessoas.idPessoa, pessoas.Nome as Nome, ';
        $campos .= 'pessoas.Email as Email, ';
        $campos .= 'usuarios.idUsuario, ';
        $campos .= 'usuarios.configuracoes as Config, ';
        $campos .= 'usuarios.idNivel, niveis.Nome as Nivel ';
        
        $busca = $this->banco->buscar(self::$tabela, $campos, $where, $join);
        if(is_array($busca)){
            if($tipo_retorno == 'obj'){
               $retorno = self::montaObjeto($busca);   
            }
        }else{$retorno = false;}
        
        return $retorno;
    }
    
    public function montaObjeto($linha){
        foreach($linha as $ch=>$vl){
            $pessoa = new Pessoa($vl['idPessoa']);
            $pessoa->setNome($vl['Nome']);
            $pessoa->setEmail($vl['Email']);
            
            $res[$ch] = new Usuario($vl[self::$seq]);
            $res[$ch]->setPessoa($pessoa);
            $res[$ch]->setNivel(new Nivel($vl['idNivel'], $vl['Nivel']));
            $res[$ch]->setConfig($vl['Config']);
        }
        return $res;
    }
}