<?php
class Gerar_DAO_atualizar
{
	function montarArquivo($_tabela_bd, $nome_classe, $buscar_coluna_primary)
	{
		$buscar_coluna_primary = new Buscar_coluna_primary();
		//$coluna_primary = $buscar_coluna_primary->buscar($_tabela_bd)->getColuna();
		//$nome_coluna_pk = strtoupper(substr($coluna_primary,0,1)).substr($coluna_primary,1);
		$listaColunaPrimaria = $buscar_coluna_primary->buscar($_tabela_bd);
		$where_update = "";
		foreach($listaColunaPrimaria as $coluna)
		{
			$where_update .= $coluna->getColuna()." = :".$coluna->getColuna();
			if ($coluna != $listaColunaPrimaria[count($listaColunaPrimaria)-1])
			{
				$where_update .= " and ";
			}
		}	
		
		$dao = "";
		$dao .= "	public function atualizar(\$".$_tabela_bd->getTabela().")\n";
		$dao .= "	{\n";
		$dao .= "		\$inputs = array();\n";
		$colunas = $_tabela_bd->getLista_colunas();
		$colunasUpdate = "";
		//$dao .= "		array_push(\$inputs, array('campo'=>':".$coluna_primary."', 'valor'=>\$".$_tabela_bd->getTabela()."->get".$nome_coluna_pk."()));\n";
		$updatesOpcionais="";
		for ($i=0; $i <count($colunas); $i++)
		{	
			//if ($colunas[$i]->getIndice() != "PRIMARY")
			//{
				$nome_coluna = strtoupper(substr($colunas[$i]->getColuna(),0,1)).substr($colunas[$i]->getColuna(),1);
				switch ($colunas[$i]->getTipo())
				{
					case ("md5"):
						//$dao .= "".$colunas[$i]->getColuna()." = md5(:".$colunas[$i]->getColuna().")";
						$dao .= "		\$alteraMD5".$nome_coluna."casoForPreenchido = \"\"; \n";
						$dao .= "		if ($".$_tabela_bd->getTabela()."->get".$nome_coluna."() != \"\")\n";
						$dao .= "		{\n";
						$dao .= "			\$alteraMD5".$nome_coluna."casoForPreenchido = \", ".$colunas[$i]->getColuna()." = md5(:".$colunas[$i]->getColuna().")\";\n";
						$dao .= "			array_push(\$inputs, array('campo'=>':".$colunas[$i]->getColuna()."', 'valor'=>\$".$_tabela_bd->getTabela()."->get".$nome_coluna."()));\n";
						$dao .= "		}\n";
						$updatesOpcionais.="\". \$alteraMD5".$nome_coluna."casoForPreenchido. \"";
					break;
					case ("data"):
						if ($colunas[$i]->getIndice() != "DATACRIACAO")//nao atualiza data de criação como diz o nome
						{	
							$dao .= "		if(\$".$_tabela_bd->getTabela()."->get".$nome_coluna."() instanceof DateTime)\n";
							$dao .= "		{\n";
							$dao .= "			array_push(\$inputs, array('campo'=>':".$colunas[$i]->getColuna()."', 'valor'=>\$".$_tabela_bd->getTabela()."->get".$nome_coluna."()->format('Y-m-d H:i:s')));\n";
							$dao .= "		}\n";
							$dao .= "		else\n";
							$dao .= "		{\n";
							$dao .= "			array_push(\$inputs, array('campo'=>':".$colunas[$i]->getColuna()."', 'valor'=>null));\n";
							$dao .= "		}\n";
							$colunasUpdate .= "".$colunas[$i]->getColuna()." = :".$colunas[$i]->getColuna()."";	
						}	
						
					break;
					case ("tabela"):
						$campoFinal = "";
						//$nome_coluna_pk_final = strtoupper(substr($colunas[$i]->getTipoColunaPrimaria()->getColuna(),0,1)).substr($colunas[$i]->getTipoColunaPrimaria()->getColuna(),1);
						//$campoFinal = "->get".$nome_coluna_pk_final."()";
			
						$dao .= "		if(\$".$_tabela_bd->getTabela()."->get".$nome_coluna."() != \"\")\n";
						$dao .= "		{\n";
						$dao .= "			array_push(\$inputs, array('campo'=>':".$colunas[$i]->getColuna()."', 'valor'=>\$".$_tabela_bd->getTabela()."->get".$nome_coluna."()".$campoFinal."));\n";	
						$dao .= "		}\n";
						$dao .= "		else\n";
						$dao .= "		{\n";
						$dao .= "			array_push(\$inputs, array('campo'=>':".$colunas[$i]->getColuna()."', 'valor'=>null));\n";
						$dao .= "		}\n";
						$colunasUpdate .= "".$colunas[$i]->getColuna()." = :".$colunas[$i]->getColuna()."";	
					break;
					case ("float"):
						$colunasUpdate .= "".$colunas[$i]->getColuna()." = :".$colunas[$i]->getColuna()."";	
						$dao .= "		array_push(\$inputs, array('campo'=>':".$colunas[$i]->getColuna()."', 'valor'=>str_replace(',','.',str_replace('.','',\$".$_tabela_bd->getTabela()."->get".$nome_coluna."()))));\n";	
					break;
					default:
						$colunasUpdate .= "".$colunas[$i]->getColuna()." = :".$colunas[$i]->getColuna()."";	
						$dao .= "		if(\$".$_tabela_bd->getTabela()."->get".$nome_coluna."() != \"\")\n";
						$dao .= "		{\n";
						$dao .= "			array_push(\$inputs, array('campo'=>':".$colunas[$i]->getColuna()."', 'valor'=>\$".$_tabela_bd->getTabela()."->get".$nome_coluna."()));\n";							
						$dao .= "		}\n";
						$dao .= "		else\n";
						$dao .= "		{\n";
						$dao .= "			array_push(\$inputs, array('campo'=>':".$colunas[$i]->getColuna()."', 'valor'=>null));\n";
						$dao .= "		}\n";
				}	
				
				
				if ($i < count($colunas)-1)
				{
					//if ($colunas[$i+1]->getTipo() != "md5" and $colunas[$i+1]->getIndice() != "DATACRIACAO" and  $colunas[$i+1]->getIndice() != "PRIMARY")//nao adicionar virgula no md5 pois cria em cima e nao atualiza data de criação como diz o nome
					//{	
						$colunasUpdate .= ", ";
					//}	
				}	
			//}	
		}
		$dao .= "		try\n";
		$dao .= "		{\n";
		if ($updatesOpcionais == "")
		{	
			$dao .= "			\$sql = \"UPDATE  ".$_tabela_bd->getTabela()."  SET ".str_replace(", ,",",",$colunasUpdate)." WHERE ".str_replace(", ,",",",$where_update)."  \";\n";
		}	
		else
		{
			$dao .= "			\$sql = \"UPDATE  ".$_tabela_bd->getTabela()."  SET ".str_replace(", ,",",",$colunasUpdate.$updatesOpcionais)." WHERE ".str_replace(", ,",",",$where_update)."  \";\n";
		}
		
		$dao .= "			return \$this->_funcoes_bd->executarSql(\$sql,\$inputs);\n";
		$dao .= "		}\n";
		$dao .= "		catch (Exception \$e)\n";
		$dao .= "		{\n";
		$dao .= "			throw new Exception(\$e->getMessage());\n";
		$dao .= "		}\n";
		$dao .= "	}\n";
		return $dao;	
	}	
}	