<?php
require_once("../../../../config/config_dir_raiz.php");
$config = new Config();
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/arquivo/Buscar_coluna_primary.php");
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/arquivo/Gerar_DAO_arqDAO/Gerar_DAO_salvar.php");
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/arquivo/Gerar_DAO_arqDAO/Gerar_DAO_buscar.php");
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/arquivo/Gerar_DAO_arqDAO/Gerar_DAO_atualizar.php");
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/arquivo/Gerar_DAO_arqDAO/Gerar_DAO_excluir.php");
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/arquivo/Gerar_DAO_arqDAO/Gerar_DAO_listarTodosRegistros.php");
require_once($config->diretorio_raiz()."/componentes/construtor/src/model/arquivo/Gerar_DAO_arqDAO/Gerar_DAO_buscarPorCampo.php");
class Gerar_DAO
{
		function montarArquivo($_tabela_bd, $nome_classe)
		{
			$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);
						
			$dao = "<?php\n";
			$dao .= "require_once(\"../../config/config_dir_raiz.php\");\n\$config = new Config();\n";
			$dao .= "require_once(\$config->diretorio_raiz().\"/src/controller/Funcoes_bd.php\");\n";
			$dao .= "require_once(\$config->diretorio_raiz().\"/src/model/".$nome_classe.".php\");\n";
			
			
			///verificar se possuí um chave estrangeira para incluir o DAO
			$colunas = $_tabela_bd->getLista_colunas();
			$lista_de_classes_incluidas_para_nao_duplicar = array();
			for ($i=0; $i <count($colunas); $i++)
			{	
				$nome_classe_dao = strtoupper(substr($colunas[$i]->getTipoTabela()->getTabela(),0,1)).substr($colunas[$i]->getTipoTabela()->getTabela(),1);
				if ($colunas[$i]->getTipo() == "tabela")
				{
					if (!in_array($nome_classe_dao, $lista_de_classes_incluidas_para_nao_duplicar))
					{	
						$dao .= "require_once(\$config->diretorio_raiz().\"/src/model/bd/".$nome_classe_dao."DAO.php\");\n";
						array_push($lista_de_classes_incluidas_para_nao_duplicar, $nome_classe_dao);
					}	
				}	
			}
			////
			$dao .= "class ".$nome_classe."DAO\n{\n";
			$dao .= "	private \$_funcoes_bd;\n";
			$dao .= "	private \$_banco_atual;\n";
			$dao .= "	private \$conexao;\n";
			$dao .= "	function __construct()\n";
			$dao .= "	{\n";
			$dao .= "		\$this->conexao = Conexao::obterConexao();\n";
			$dao .= "		\$this->_banco_atual = Conexao::getUtilizarBanco();\n";
			$dao .= "		\$this->_funcoes_bd = new Funcoes_bd();\n";			
			$dao .= "	}\n";
			///funcao salvar
			$gerar_DAO_slavar = new Gerar_DAO_salvar();
			$dao .= $gerar_DAO_slavar->montarArquivo($_tabela_bd, $nome_classe, $buscar_coluna_primary);
			///funcao buscar
			$gerar_DAO_buscar = new Gerar_DAO_buscar();
			$dao .= $gerar_DAO_buscar->montarArquivo($_tabela_bd, $nome_classe, $buscar_coluna_primary);
			///funcao atualizar
			$gerar_DAO_atualizar = new Gerar_DAO_atualizar();
			$dao .= $gerar_DAO_atualizar->montarArquivo($_tabela_bd, $nome_classe, $buscar_coluna_primary);
			//funcao excluir
			$gerar_DAO_excluir = new Gerar_DAO_excluir();
			$dao .= $gerar_DAO_excluir->montarArquivo($_tabela_bd, $nome_classe, $buscar_coluna_primary);
			///funcao listarTodosRegistros
			$gerar_DAO_listarTodosRegistros = new Gerar_DAO_listarTodosRegistros();
			$dao .= $gerar_DAO_listarTodosRegistros->montarArquivo($_tabela_bd, $nome_classe, $buscar_coluna_primary);
			/////cria funcoes de buscarPorCampo
			$gerar_DAO_buscarPorCampo = new Gerar_DAO_buscarPorCampo();
			$dao .= $gerar_DAO_buscarPorCampo->montarArquivo($_tabela_bd, $nome_classe, $buscar_coluna_primary);
			$dao .= "}";
			return $dao;
		}
}