<?php
//header("Refresh:15"); 

include_once("conexao.php");

// Inclua a configuração do Mercado Pago
require_once 'vendor/autoload.php';

// Defina o fuso horário para horário de Brasília
date_default_timezone_set('America/Sao_Paulo');


// Pegue todos os pagamentos com datahora dentro das últimas 2 horas
$stmtPagamentos = $painel_geral->prepare("SELECT CadUser, usuario, email, telefone, valor, status, datahora, paymentId FROM pagamentos WHERE status != 'Aprovado'");

$stmtPagamentos->execute();
$pagamentos = $stmtPagamentos->fetchAll(PDO::FETCH_ASSOC);

$agora = new DateTime('now', new DateTimeZone('America/Sao_Paulo'));

foreach ($pagamentos as $pagamento) {
    // Converter a data de cadastro para um objeto DateTime
    $dataCadastro = new DateTime($pagamento['datahora'], new DateTimeZone('America/Sao_Paulo'));

    // Calcular a diferença entre a data de cadastro e o momento atual
    $intervalo = $agora->diff($dataCadastro);

    // Verificar se a diferença é menor que 2 horas
    if (($intervalo->h < 2 && $intervalo->d == 0) || ($intervalo->d == 0 && $intervalo->h == 0 && $intervalo->i < 120)) {
        // A data de cadastro é menor que 2 horas do horário atual
        // Chame a função desejada aqui
    
            $CadUser = $pagamento['CadUser'];
            $usuario = $pagamento['usuario'];
            $paymentId = $pagamento['paymentId'];
            echo "Payment ID: $paymentId <br>";
            
            // Pegue as credenciais do MercadoPago para este CadUser
            $stmtContaMP = $painel_geral->prepare("SELECT clientid, clientsecret FROM contamercadopago WHERE CadUser = :CadUser AND bloqueado = 'N'");
            $stmtContaMP->bindParam(':CadUser', $CadUser, PDO::PARAM_STR);
            $stmtContaMP->execute();
            $contaMP = $stmtContaMP->fetch(PDO::FETCH_ASSOC);
        
            if ($contaMP) {
                $clientid = $contaMP['clientid'];
                $clientsecret = $contaMP['clientsecret'];
        
                // Configurar as credenciais do Mercado Pago
                MercadoPago\SDK::setClientId($clientid);
                MercadoPago\SDK::setClientSecret($clientsecret);
        
                // Verifique o pagamento usando o ID fornecido
                try {
                    // Pegue o pagamento usando o ID fornecido
                    $payment = MercadoPago\Payment::find_by_id($paymentId);
        
                    // Checar se o pagamento foi aprovado
                    if ($payment->status == 'approved') {
                        // Atualizar o status do pagamento para "Aprovado"
                        $stmtUpdateStatus = $painel_geral->prepare("UPDATE pagamentos SET status = 'Aprovado' WHERE paymentId = :paymentId");
                        $stmtUpdateStatus->bindParam(':paymentId', $paymentId, PDO::PARAM_STR);
                        $stmtUpdateStatus->execute();
                        
                        // Agora vamos pegar o usuário que tem o paymentId associado
                        $stmtUsuario = $painel_geral->prepare("SELECT usuario, valor, dias, telefone FROM pagamentos WHERE paymentId = :paymentId");
                        $stmtUsuario->bindParam(':paymentId', $paymentId, PDO::PARAM_STR);
                        $stmtUsuario->execute();
                        $usuarioData = $stmtUsuario->fetch(PDO::FETCH_ASSOC);
                        
                        if ($usuarioData) {
                            $usuario = $usuarioData['usuario'];  // Pegando o nome de usuário
                            $valor = $usuarioData['valor'];     // Pegando o valor do pagamento associado
                            $dias = $usuarioData['dias'];     // Pegando o valor do pagamento associado
        
                            $telefoneplano = $usuarioData['telefone'];  // Número de telefone associado ao plano
        
                           
                            
        
                                // Agora, vamos calcular a data do prêmio
                               
                                $stmtSelect = $painel_user->prepare("SELECT data_premio FROM usuario WHERE usuario = :usuario");
                                $stmtSelect->bindParam(':usuario', $usuario, PDO::PARAM_STR);
                                $stmtSelect->execute();
                                $data = $stmtSelect->fetch(PDO::FETCH_ASSOC);
                                
                                // Se não encontrou, tenta buscar em 'teste'
                                if (!$data) {
                                    $stmtSelect = $painel_user->prepare("SELECT data_premio FROM teste WHERE usuario = :usuario");
                                    $stmtSelect->bindParam(':usuario', $usuario, PDO::PARAM_STR);
                                    $stmtSelect->execute();
                                    $data = $stmtSelect->fetch(PDO::FETCH_ASSOC);
                                }
                                
                                // Verifica se encontrou algum resultado em uma das tabelas
                                if ($data && isset($data['data_premio'])) {
                                    $dataPremioAtual = (int)$data['data_premio'];
                                
                                    // Se a data ainda está no futuro, soma a partir dela. Caso contrário, soma a partir de agora
                                    $baseDate = new DateTime();
                                    if ($dataPremioAtual > time()) {
                                        $baseDate->setTimestamp($dataPremioAtual);
                                    }
                                
                                    // Adiciona os dias
                                    $dias = intval($dias);
                                    $baseDate->modify("+$dias days");
                                    $newDatapremio = $baseDate->getTimestamp();
                                
                                    // Atualiza na tabela 'usuario'
                                    $stmtUpdateDatapremio = $painel_user->prepare("UPDATE usuario SET data_premio = :datapremio WHERE usuario = :usuario");
                                    $stmtUpdateDatapremio->bindParam(':datapremio', $newDatapremio, PDO::PARAM_INT);
                                    $stmtUpdateDatapremio->bindParam(':usuario', $usuario, PDO::PARAM_STR);
                                    
                                    if ($stmtUpdateDatapremio->execute() && $stmtUpdateDatapremio->rowCount() > 0) {
                                        // UPDATE foi bem-sucedido e alguma linha foi afetada
                                    
                                        $stmtapi = $painel_geral->prepare("SELECT * FROM sms WHERE cadUser = :cadUser AND bloqueado = 'N'");
                                        $stmtapi->bindParam(':cadUser', $CadUser, PDO::PARAM_STR);  
                                        $stmtapi->execute();
                                        $stmtapi = $stmtapi->fetch(PDO::FETCH_ASSOC);  
                                        
                                        if ($stmtapi) {
                                            $token2 = $stmtapi['user'];       // O valor de 'user' no banco será o $token
                                            $linkWhatsApp2 = $stmtapi['senha']; 
                                            $nomeInstancia2 = $stmtapi['evo'];
                                    
                                            $mensagem2 = "Seu usuário $usuario foi renovado com sucesso por $dias dias.";
                                    
                                            // Formata o número
                                            if ($telefoneplano[2] !== '9') {
                                                $telefoneplano = substr($telefoneplano, 0, 2) . '9' . substr($telefoneplano, 2);
                                            }
                                    
                                            $telefone2 = "55" . $telefoneplano;
                                    
                                            $totalNumeros = strlen($telefone2);
                                            if ($totalNumeros == 13 || $totalNumeros == 12) {
                                                $curl = curl_init();
                                                curl_setopt_array($curl, [
                                                    CURLOPT_URL => $linkWhatsApp2 . '/message/sendText/' . $nomeInstancia2,
                                                    CURLOPT_RETURNTRANSFER => true,
                                                    CURLOPT_ENCODING => "",
                                                    CURLOPT_MAXREDIRS => 10,
                                                    CURLOPT_TIMEOUT => 30,
                                                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                                                    CURLOPT_CUSTOMREQUEST => "POST",
                                                    CURLOPT_POSTFIELDS => json_encode([
                                                        'number' => $telefone2,
                                                        'text'   => $mensagem2
                                                    ]),
                                                    CURLOPT_HTTPHEADER => [
                                                        "Content-Type: application/json",
                                                        "apikey: $token2"
                                                    ],
                                                ]);
                                    
                                                $response = curl_exec($curl);
                                                $curlError = curl_error($curl);
                                                curl_close($curl);
                                    
                                                if ($curlError) {
                                                    echo "Erro ao enviar mensagem: $curlError";
                                                } else {
                                                    echo "Mensagem enviada com sucesso!";
                                                }
                                            } else {
                                                echo "Número de telefone inválido: $telefone2";
                                            }
                                        } else {
                                            echo "Não encontrei dados de envio no SMS: $CadUser";
                                        }
                                    } else {
                                        echo "Falha ao atualizar data_premio para o usuário $usuario.";
                                    }
                                    
                                    
                                    if ($stmtUpdateDatapremio->rowCount() == 0) {
                                        $stmtUpdateDatapremioTeste = $painel_user->prepare("UPDATE teste SET data_premio = :datapremio WHERE usuario = :usuario");
                                        $stmtUpdateDatapremioTeste->bindParam(':datapremio', $newDatapremio, PDO::PARAM_INT);
                                        $stmtUpdateDatapremioTeste->bindParam(':usuario', $usuario, PDO::PARAM_STR);
                                        $stmtUpdateDatapremioTeste->execute();
                                        
                                        if ($stmtUpdateDatapremioTeste->rowCount() > 0) {
                                            $stmtTeste = $painel_user->prepare("SELECT * FROM teste WHERE usuario = :usuario");
                                            $stmtTeste->bindParam(':usuario', $usuario, PDO::PARAM_STR);
                                            $stmtTeste->execute();
                                            $usuarioTeste = $stmtTeste->fetch(PDO::FETCH_ASSOC);
    
                                            // Passo 2: Gravar os dados na tabela usuario
                                            try {
                                                // Definindo um valor para data_cadastro caso esteja vazio
                                                if (empty($usuarioTeste['data_cadastro']) || $usuarioTeste['data_cadastro'] === '0000-00-00 00:00:00') {
                                                    // Define a data atual como padrão
                                                    $usuarioTeste['data_cadastro'] = date('Y-m-d H:i:s');
                                                }
                                            
                                                $stmtInsertUsuario = $painel_user->prepare("INSERT INTO usuario (CadUser, nome, sobrenome, usuario, senha, email, celular, foto, conexao, perfil, bloqueado, data_cadastro, data_premio, data_nascimento, VencEmail, VencSMS, ValorCobrado, DataEnviado, PrePago, xml, MensagemInterna, obs, grupo) 
                                                                                            VALUES (:CadUser, :nome, :sobrenome, :usuario, :senha, :email, :celular, :foto, :conexao, :perfil, :bloqueado, :data_cadastro, :data_premio, :data_nascimento, :VencEmail, :VencSMS, :ValorCobrado, :DataEnviado, :PrePago, :xml, :MensagemInterna, :obs, :grupo)");
                                            
                                                $stmtInsertUsuario->bindParam(':CadUser', $usuarioTeste['CadUser']);
                                                $stmtInsertUsuario->bindParam(':nome', $usuarioTeste['nome']);
                                                $stmtInsertUsuario->bindParam(':sobrenome', $usuarioTeste['sobrenome']);
                                                $stmtInsertUsuario->bindParam(':usuario', $usuarioTeste['usuario']);
                                                $stmtInsertUsuario->bindParam(':senha', $usuarioTeste['senha']);
                                                $stmtInsertUsuario->bindParam(':email', $usuarioTeste['email']);
                                                $stmtInsertUsuario->bindParam(':celular', $usuarioTeste['celular']);
                                                $stmtInsertUsuario->bindParam(':foto', $usuarioTeste['foto']);
                                                $stmtInsertUsuario->bindParam(':conexao', $usuarioTeste['conexao']);
                                                $stmtInsertUsuario->bindParam(':perfil', $usuarioTeste['perfil']);
                                                $stmtInsertUsuario->bindParam(':bloqueado', $usuarioTeste['bloqueado']);
                                                $stmtInsertUsuario->bindParam(':data_cadastro', $usuarioTeste['data_cadastro']);
                                                $stmtInsertUsuario->bindParam(':data_premio', $usuarioTeste['data_premio']);
                                                $stmtInsertUsuario->bindParam(':data_nascimento', $usuarioTeste['data_nascimento']);
                                                $stmtInsertUsuario->bindParam(':VencEmail', $usuarioTeste['VencEmail']);
                                                $stmtInsertUsuario->bindParam(':VencSMS', $usuarioTeste['VencSMS']);
                                                $stmtInsertUsuario->bindParam(':ValorCobrado', $usuarioTeste['ValorCobrado']);
                                                $stmtInsertUsuario->bindParam(':DataEnviado', $usuarioTeste['DataEnviado']);
                                                $stmtInsertUsuario->bindParam(':PrePago', $usuarioTeste['PrePago']);
                                                $stmtInsertUsuario->bindParam(':xml', $usuarioTeste['xml']);
                                                $stmtInsertUsuario->bindParam(':MensagemInterna', $usuarioTeste['MensagemInterna']);
                                                $stmtInsertUsuario->bindParam(':obs', $usuarioTeste['obs']);
                                                $stmtInsertUsuario->bindParam(':grupo', $usuarioTeste['grupo']);
                                            
                                                $stmtInsertUsuario->execute();
                                                
                                                $stmtDeleteTeste = $painel_user->prepare("DELETE FROM teste WHERE usuario = :usuario");
                                                $stmtDeleteTeste->bindParam(':usuario', $usuario, PDO::PARAM_STR);
                                                $stmtDeleteTeste->execute();
                                                
                                            } catch (PDOException $e) {
                                                echo "Erro ao gravar no banco: " . $e->getMessage();
                                            } 
                                            $stmtapi = $painel_geral->prepare("SELECT * FROM sms WHERE cadUser = :cadUser AND bloqueado = 'N'");
                                            $stmtapi->bindParam(':cadUser', $CadUser, PDO::PARAM_STR);  
                                            $stmtapi->execute();
                                            $stmtapi = $stmtapi->fetch(PDO::FETCH_ASSOC);  
                                            
                                            if ($stmtapi) {
                                                $token2 = $stmtapi['user'];       // O valor de 'user' no banco será o $token
                                                $linkWhatsApp2 = $stmtapi['senha']; 
                                                $nomeInstancia2 = $stmtapi['evo'];
                                            
                                            } else {
                                                echo "Não encontrei : $linkWhatsApp2 $nomeInstancia2 $token2.";
                                            }   
                    
                                                    
                                            // Agora, vamos configurar e enviar a mensagem via WhatsApp
                                            $mensagem2 = "Seu usuário $usuario foi renovado com sucesso por $dias dias.";
                    
                                            $telefoneplano = substr($telefoneplano, 0);  // Mantém o DDD intacto (não precisa de alteração)
                    
                                            if ($telefoneplano[2] !== '9') {
                                                // Se o número após o DDD não começa com '9', adiciona o '9'
                                                $telefoneplano = substr($telefoneplano, 0, 2) . '9' . substr($telefoneplano, 2);
                                            }
                                            
                                            // Agora, adicionamos o código do país (55) ao número
                                            $telefone2 = "55" . $telefoneplano;
                                            
                                            // Verifique o tamanho do número
                                            $totalNumeros = strlen($telefone2);
                                            if ($totalNumeros == 13 || $totalNumeros == 12) {
                                                // Dados para a solicitação POST
                                                $curl = curl_init();
                                                curl_setopt_array($curl, [
                                                    CURLOPT_URL => $linkWhatsApp2 . '/message/sendText/' . $nomeInstancia2,
                                                    CURLOPT_RETURNTRANSFER => true,
                                                    CURLOPT_ENCODING => "",
                                                    CURLOPT_MAXREDIRS => 10,
                                                    CURLOPT_TIMEOUT => 30,
                                                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                                                    CURLOPT_CUSTOMREQUEST => "POST",
                                                    CURLOPT_POSTFIELDS => json_encode([
                                                        'number' => $telefone2, // Número de telefone
                                                        'text'   => $mensagem2  // Mensagem a ser enviada
                                                    ]),
                                                    CURLOPT_HTTPHEADER => [
                                                        "Content-Type: application/json",  // Content-Type adequado para JSON
                                                        "apikey: $token2"  // Usando a variável $token para a chave de API
                                                    ],
                                                ]);
                                            
                                                $response = curl_exec($curl);
                                                $curlError = curl_error($curl);  // Verifica se houve erro com o curl
                                                curl_close($curl);
                                            
                                            
    
    
                                            // Passo 3: Apagar o registro de teste
                                          
    
    
                                        } else {
                                            echo "Nenhum usuário encontrado nas tabelas 'usuario' ou 'teste' para o usuário: $usuario.";
                                        }
                                    } else {
                                        echo "Data de prêmio atualizada na tabela 'usuario' para o usuário: $usuario.";
                                    }
                                    
                                   
                                } else {
                                }
                                
                                
                                
                               
                                } else {
                                }
                            
                        } else {
                        }
                    }
                    
                } catch (Exception $e) {
                    // Caso haja um erro, exiba o erro para depuração
                }
            } else {
            }
                
             
        
    }
}
?>
