<?php if(file_exists("../../config/config_dir_raiz.php")) { require_once("../../config/config_dir_raiz.php"); } elseif(file_exists("config/config_dir_raiz.php")) { require_once("config/config_dir_raiz.php"); }

$config = new Config();
require_once($config->diretorio_raiz()."/src/controller/Funcoes_bd.php");
require_once($config->diretorio_raiz()."/src/model/Bi_usuario.php");
require_once($config->diretorio_raiz()."/src/model/bd/Bi_areaDAO.php");
class Bi_usuarioDAO
{
	private $_funcoes_bd;
	private $_banco_atual;
	private $conexao;
	function __construct()
	{
		$this->conexao = Conexao::obterConexao();
		$this->_banco_atual = Conexao::getUtilizarBanco();
		$this->_funcoes_bd = new Funcoes_bd();
	}
	public function salvar($bi_usuario)
	{
		$inputs = array();
		if($bi_usuario->getCodigo() != "")
		{
			array_push($inputs, array('campo'=>':codigo', 'valor'=>$bi_usuario->getCodigo()));
		}
		else
		{
			array_push($inputs, array('campo'=>':codigo', 'valor'=>null));
		}
		if($bi_usuario->getUsuario() != "")
		{
			array_push($inputs, array('campo'=>':usuario', 'valor'=>$bi_usuario->getUsuario()));
		}
		else
		{
			array_push($inputs, array('campo'=>':usuario', 'valor'=>null));
		}
		array_push($inputs, array('campo'=>':senha', 'valor'=>$bi_usuario->getSenha()));
		if($bi_usuario->getNome() != "")
		{
			array_push($inputs, array('campo'=>':nome', 'valor'=>$bi_usuario->getNome()));
		}
		else
		{
			array_push($inputs, array('campo'=>':nome', 'valor'=>null));
		}
		if($bi_usuario->getAtivo() != "")
		{
			array_push($inputs, array('campo'=>':ativo', 'valor'=>$bi_usuario->getAtivo()));
		}
		else
		{
			array_push($inputs, array('campo'=>':ativo', 'valor'=>null));
		}
		if($bi_usuario->getData_inclusao() instanceof DateTime)
		{
			array_push($inputs, array('campo'=>':data_inclusao', 'valor'=>$bi_usuario->getData_inclusao()->format('Y-m-d H:i:s')));
		}
		else
		{
			array_push($inputs, array('campo'=>':data_inclusao', 'valor'=>null));
		}
		if($bi_usuario->getArea() != "")
		{
			array_push($inputs, array('campo'=>':area', 'valor'=>$bi_usuario->getArea()));
		}
		else
		{
			array_push($inputs, array('campo'=>':area', 'valor'=>null));
		}
		if($bi_usuario->getAdmin() != "")
		{
			array_push($inputs, array('campo'=>':admin', 'valor'=>$bi_usuario->getAdmin()));
		}
		else
		{
			array_push($inputs, array('campo'=>':admin', 'valor'=>null));
		}
		if($bi_usuario->getAlterar_senha_proximo_login() != "")
		{
			array_push($inputs, array('campo'=>':alterar_senha_proximo_login', 'valor'=>$bi_usuario->getAlterar_senha_proximo_login()));
		}
		else
		{
			array_push($inputs, array('campo'=>':alterar_senha_proximo_login', 'valor'=>null));
		}
		try
		{
			$sql = "INSERT INTO bi_usuario (codigo, usuario, senha, nome, ativo, data_inclusao, area, admin, alterar_senha_proximo_login) VALUES (:codigo, :usuario, md5(:senha), :nome, :ativo, :data_inclusao, :area, :admin, :alterar_senha_proximo_login)  ";
			return $this->_funcoes_bd->executarSql($sql,$inputs);
		}
		catch (Exception $e)
		{
			throw new Exception($e->getMessage());
		}
	}
	public function buscarBi_usuario($codigo)
	{
		$inputs = array();
		array_push($inputs, array('campo'=>':codigo', 'valor'=>$codigo));
		$sql = "SELECT * FROM bi_usuario where codigo = :codigo "; 
		$bi_usuario = new Bi_usuario();
		$rows_bi_usuario = $this->_funcoes_bd->sqlArrayInputs($sql, $inputs);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
		}
		return $bi_usuario;
	}
	public function buscarFiltro($where)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario  ".$where;
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
	public function atualizar($bi_usuario)
	{
		$inputs = array();
		if($bi_usuario->getCodigo() != "")
		{
			array_push($inputs, array('campo'=>':codigo', 'valor'=>$bi_usuario->getCodigo()));
		}
		else
		{
			array_push($inputs, array('campo'=>':codigo', 'valor'=>null));
		}
		if($bi_usuario->getUsuario() != "")
		{
			array_push($inputs, array('campo'=>':usuario', 'valor'=>$bi_usuario->getUsuario()));
		}
		else
		{
			array_push($inputs, array('campo'=>':usuario', 'valor'=>null));
		}
		$alteraMD5SenhacasoForPreenchido = ""; 
		if ($bi_usuario->getSenha() != "")
		{
			$alteraMD5SenhacasoForPreenchido = ", senha = md5(:senha)";
			array_push($inputs, array('campo'=>':senha', 'valor'=>$bi_usuario->getSenha()));
		}
		if($bi_usuario->getNome() != "")
		{
			array_push($inputs, array('campo'=>':nome', 'valor'=>$bi_usuario->getNome()));
		}
		else
		{
			array_push($inputs, array('campo'=>':nome', 'valor'=>null));
		}
		if($bi_usuario->getAtivo() != "")
		{
			array_push($inputs, array('campo'=>':ativo', 'valor'=>$bi_usuario->getAtivo()));
		}
		else
		{
			array_push($inputs, array('campo'=>':ativo', 'valor'=>null));
		}
		if($bi_usuario->getArea() != "")
		{
			array_push($inputs, array('campo'=>':area', 'valor'=>$bi_usuario->getArea()));
		}
		else
		{
			array_push($inputs, array('campo'=>':area', 'valor'=>null));
		}
		if($bi_usuario->getAdmin() != "")
		{
			array_push($inputs, array('campo'=>':admin', 'valor'=>$bi_usuario->getAdmin()));
		}
		else
		{
			array_push($inputs, array('campo'=>':admin', 'valor'=>null));
		}
		if($bi_usuario->getAlterar_senha_proximo_login() != "")
		{
			array_push($inputs, array('campo'=>':alterar_senha_proximo_login', 'valor'=>$bi_usuario->getAlterar_senha_proximo_login()));
		}
		else
		{
			array_push($inputs, array('campo'=>':alterar_senha_proximo_login', 'valor'=>null));
		}
		try
		{
			$sql = "UPDATE  bi_usuario  SET codigo = :codigo, usuario = :usuario, nome = :nome, ativo = :ativo, area = :area, admin = :admin, alterar_senha_proximo_login = :alterar_senha_proximo_login". $alteraMD5SenhacasoForPreenchido. " WHERE codigo = :codigo  ";
			return $this->_funcoes_bd->executarSql($sql,$inputs);
		}
		catch (Exception $e)
		{
			throw new Exception($e->getMessage());
		}
	}
	public function excluir($bi_usuario)
	{
		try
		{
			$sql = "DELETE FROM bi_usuario  WHERE codigo =  :codigo ";
			$inputs = array();
			array_push($inputs, array('campo'=>':codigo', 'valor'=>$bi_usuario->getCodigo()));
			return $this->_funcoes_bd->executarSql($sql,$inputs);
		}
		catch (Exception $e)
		{
			throw new Exception($e->getMessage());
		}
	}
	public function listarTodosRegistros()
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario";
		$listaBi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($listaBi_usuario,$bi_usuario );
		}
		return $listaBi_usuario;
	}
	public function buscarBi_usuarioPorUsuario($usuario)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario where usuario like '%".$usuario."%'";
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
	public function buscarBi_usuarioPorSenha($senha)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario where senha like '%".$senha."%'";
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
	public function buscarBi_usuarioPorNome($nome)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario where nome like '%".$nome."%'";
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
	public function buscarBi_usuarioPorAtivo($ativo)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario where ativo like '%".$ativo."%'";
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
	public function buscarBi_usuarioPorData_inclusao($data_inclusao)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario where data_inclusao like '%".$data_inclusao."%'";
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
	public function buscarBi_usuarioPorArea($area)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario where area = ".$area."";
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
	public function buscarBi_usuarioPorAdmin($admin)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario where admin like '%".$admin."%'";
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
	public function buscarBi_usuarioPorAlterar_senha_proximo_login($alterar_senha_proximo_login)
	{
		$inputs = array();
		$sql = "SELECT * FROM bi_usuario where alterar_senha_proximo_login like '%".$alterar_senha_proximo_login."%'";
		$lista_bi_usuario = array();
		$rows_bi_usuario = $this->_funcoes_bd->sql($sql);
		foreach ($rows_bi_usuario as $row)
		{
			$bi_usuario = new Bi_usuario();
			$bi_usuario->setCodigo($row['codigo']);
			$bi_usuario->setUsuario($row['usuario']);
			$bi_usuario->setSenha($row['senha']);
			$bi_usuario->setNome($row['nome']);
			$bi_usuario->setAtivo($row['ativo']);
			if($row['data_inclusao'] != "")
			{
				$dateData_inclusao = DateTime::createFromFormat('Y-m-d H:i:s', $row['data_inclusao']);
				$bi_usuario->setData_inclusao($dateData_inclusao);
			}
			if($row['area'] != "")
			{
				$areaDAO = new Bi_areaDAO();
				$bi_usuario->setArea($areaDAO->buscarBi_area($row['area']));
			}
			else
			{
				$bi_usuario->setArea(new Bi_area());
			}
			$bi_usuario->setAdmin($row['admin']);
			$bi_usuario->setAlterar_senha_proximo_login($row['alterar_senha_proximo_login']);
			array_push($lista_bi_usuario, $bi_usuario);
		}
		return $lista_bi_usuario;
	}
}