<?php
require_once("connect.php");
error_reporting(0);
//Alimentar array singular
$sql = "SELECT table_name, column_name, COLUMN_TYPE
            	FROM information_schema.columns
                where table_schema like '%erpc%'
                ;";

$tabelas_local = array();

//TABLE_NAME , COLUMN, TYPE
$result = mysqli_query($conexao, $sql);

if(mysqli_num_rows($result) > 0){
    
    
    //Variável para verificar se continua a mesma tabela
    $table_name_anterior = '';
    
    $tabela_origem = array(  'tabela' => '', 'colunas' => array());
    $colunas = array();

    while ($row = mysqli_fetch_assoc($result)){
        
        $table_name = $row['table_name'];
        
        //A tabela é diferente da iteração anterior?
        if($table_name != $table_name_anterior){
            
            //Se mudei para próxima tabela
            if($table_name_anterior != ''){
                
                //Preencho a Tabela com as Colunas
                $tabela_origem['colunas'] = $colunas;
                
                //Insiro a Tabela no array de TabelaS
                $tabelas_local[] = $tabela_origem;
            }
            
            //Redeclaro o array de colunas e o array de tabela de origem (Array vazio)
            $colunas = array();
            $tabela_origem = array(  'tabela' => '', 'colunas' => array());
            
            $tabela_origem['tabela'] = $table_name;

            
            //Array com os dados da coluna da Tabela
            
            $coluna = array('coluna'=> '',
                            'tipo' => '' );
            
            //Foreach para navegar dentro de cada elemento do $row (table_name, column_name, COLUMN_TYPE)
            foreach ($row as $column => $valor){
               
                if ($column == 'column_name'){
                    $coluna['coluna'] = "$valor";
                }
                if ($column == 'COLUMN_TYPE'){
                    $coluna['tipo'] = "$valor";
                }

            }
            
            //Acrescento no array de colunas o array com a coluna atual.
            $colunas[] = $coluna;
            
        }else{ //Else -> $row tem como table_name o mesmo table_name da tabela anterior

            
            $coluna = array('coluna'=> '',
                            'tipo' => '' );
            
            //Foreach para navegar dentro de cada elemento do $row (table_name, column_name, COLUMN_TYPE)
            foreach ($row as $column => $valor){
                
                if ($column == 'column_name'){
                    $coluna['coluna'] = "$valor";
                }
                if ($column == 'COLUMN_TYPE'){
                    $coluna['tipo'] = "$valor";
                }
            }

            $colunas[] = $coluna;
        }
        $table_name_anterior = $table_name;
    }
    
    //Após a última iteração, insere as colunas na tabela. Depois insere a tabela no array de Tabelas.
    $tabela_origem['colunas'] = $colunas;
    $tabelas_local[] = $tabela_origem;
    
}

if(count($_POST)>0){

    $tabelas_atualizadas = $_POST;
    
    $faltantes = array();
    
    //Para cada Tabela do array de tabela vindo da base de dados atualizada, chamo ela de tabela
    foreach($tabelas_atualizadas as $tabela){
        
        //Cria um array para tabela faltante que será ou não, adicionado ao array de faltantes
        $faltante = array(  'tabela' => $tabela['tabela'], 'colunas' => array());
        
        //1 indica que a tabela está idêntica;  0 indica que a tabela não está idêntica
        $tabela_ok = 0;
        
        //Laco para buscar cada tabela do array de tabelas da base de dados destino (sendo verificada).
        foreach($tabelas_local as $tabela_comparacao){
            
            //Se a tabela destino tiver o mesmo nome da tabela origem, ela existe e entramos no if
            if($tabela_comparacao['tabela'] == $tabela['tabela']){
                
                //Nome está igual - Caso alguma coluna esteja diferente, é mudado para 0
                $tabela_ok = 1;
                
                //Declaração de um array para colunas que por ventura faltarem.
                $colunas_faltantes = array();
                
                //Já que a tabela existe, então outro laço vai verificar coluna a coluna da tabela original
                //e então busca-la na tabela de destino
                foreach($tabela['colunas'] as $coluna) {
                    
                    //Array com o nome e o tipo da coluna da tabela origem - Ele será adicionado no array 
                    //colunas_faltantes, se por ventura esta coluna não existir na tabela destino. 
                    $coluna_faltante = array('coluna'=> $coluna['coluna'],
                        'tipo' => $coluna['tipo'] );
                    
                    $coluna_ok = 0;
                    
                    //laço para percorrer tods colunas ta dabela de comparacao
                    foreach($tabela_comparacao['colunas'] as $coluna_comparacao){
                        
                        //Se o nome da coluna existir e o tipo for identicos da coluna da tabela origem
                        if($coluna['coluna'] == $coluna_comparacao['coluna'] && $coluna['tipo'] == $coluna_comparacao['tipo']){
                            
                            $coluna_ok = 1;
                            
                        }
                    }
                    if($coluna_ok == 0){
                        $tabela_ok = 0;
                        array_push($colunas_faltantes, $coluna_faltante);
                    }
                    
                }
                if($tabela_ok == 0){
                    $faltante['colunas'] = $colunas_faltantes;
                }
                
            }
            
        }
        if($tabela_ok == 0){
            array_push($faltantes, $faltante);
        }
    
    }
    
    
    echo "As seguintes tabelas não existem ou estão faltando colunas: <br><br>";
    $i = 0;
    foreach($faltantes as $tabela){
        echo "&emsp;" . ++$i . "-" . $tabela['tabela'] . "<br>";
    
        foreach($tabela['colunas'] as $coluna) {
            echo "&emsp;&emsp;&emsp;&emsp;" . $coluna['coluna'];
            echo "&emsp;&emsp;&emsp;&emsp;" . $coluna['tipo'] . "<br>";
    
        }
    }

}else{
    //$ar_info = json_encode($ar_geral);
    $ar_info = http_build_query($tabelas_local);
    
    //criando o recurso cURL
    $cr = curl_init();
    
    //definindo a url de busca 
    curl_setopt($cr, CURLOPT_URL, "http://portoalto.codetecnologia.com.br/diagnostico.php");
     
    //definindo a url de busca 
    curl_setopt($cr, CURLOPT_RETURNTRANSFER, true);
     
    //definino que o método de envio, será POST
    curl_setopt($cr, CURLOPT_POST, TRUE);
     
    //definindo os dados que serão enviados
    curl_setopt($cr, CURLOPT_POSTFIELDS, $ar_info);
     
    //definindo uma variável para receber o conteúdo da página...
    $retorno = curl_exec($cr);
    
     
    //fechando-o para liberação do sistema.
    curl_close($cr); //fechamos o recurso e liberamos o sistema...
    
    
    
    //echo "Tamanho: " . sizeof($retorno);
    //echo "<br> tamanho do array: " . $i;
    
    //mostrando o conteúdo...
    echo "<pre>";
    print_r($retorno);
    echo "</pre>";
}
?>