<?php
// Inclui o arquivo de conexão com o banco de dados
include_once("conexao.php");
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

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

// Obtém a data e hora atual
$data_atual = time();

// Consulta para buscar as datas de premiação na tabela usuario
$query = "SELECT id, CadUser, email, nome, usuario, celular, data_premio FROM teste";
$stmt = $painel_user->prepare($query);
$stmt->execute();
$usuarios = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Inicializa as variáveis para os arrays de vencendo e vencidos
$vencendo = [];
$vencido = [];

// Loop para verificar cada data de premiação
foreach ($usuarios as $usuario) {
    // Converte o timestamp de 'data_premio' para o horário de Brasília
    $data_premio = $usuario['data_premio'];
    $CadUser = $usuario['CadUser'];
    $usuario2 = $usuario['usuario'];
    $nome2 = $usuario['nome'];

    // Verifica se a data da premiação está a menos de 2 dias
    if ($data_premio > $data_atual && $data_premio <= ($data_atual + 2 * 24 * 60 * 60)) {
        // Vencendo: Se a data estiver dentro dos próximos 2 dias a partir de hoje
        $vencendo[] = $usuario;
    } elseif ($data_premio < $data_atual) {
        // Vencido: Se a data já passou
        $vencido[] = $usuario;
    }
}
function enviarMensagemVencido($usuario, $sms_preferencia, $painel_geral) {
    try {
        // 1. Recuperando o token e dados do SMS
        $sql = "SELECT user, senha, evo FROM sms WHERE cadUser = :cadUser AND bloqueado = 'N'";
        $stmt = $painel_geral->prepare($sql);
        $stmt->bindParam(':cadUser', $usuario['CadUser'], PDO::PARAM_STR);
        $stmt->execute();

        if ($stmt->rowCount() > 0) {
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            $token = $result['user'];       // O valor de 'user' no banco será o $token
            $linkWhatsApp = $result['senha']; 
            $nomeInstancia = $result['evo']; 
        } else {
            echo "Usuário não encontrado no banco de dados.<br>";
            return;
        }

        // 2. Preparando o número de telefone
        $numero = preg_replace('/\D/', '', $usuario['celular']); // Remove tudo que não é número
        $numero = ajustarNumeroTelefone($numero);  // Ajuste do número de telefone (se necessário)
        $telefone = "55" . $numero; // Adiciona o código do país

        // 3. Recuperando o ID de vencimento da tabela sms_preferencias
        $query_sms = "SELECT Vencimento FROM sms_preferencias WHERE CadUser = :CadUser";
        $stmt_sms = $painel_geral->prepare($query_sms);
        $stmt_sms->bindParam(':CadUser', $usuario['CadUser']);
        $stmt_sms->execute();
        $sms_preferencia1 = $stmt_sms->fetch(PDO::FETCH_ASSOC);

        if (!$sms_preferencia1 || !isset($sms_preferencia1['Vencimento']) || $sms_preferencia1['Vencimento'] <= 0) {
            echo "ID de vencimento inválido para o usuário " . $usuario['CadUser'] . ".<br>";
            return;
        }

        $vencimentoId = intval($sms_preferencia1['Vencimento']);  // ID de vencimento

        // 4. Recuperando a mensagem com base no ID de vencimento
        $mensagem = obterMensagem($vencimentoId, $painel_geral);  // Função que retorna a mensagem baseada no ID
        if (empty($mensagem)) {
            echo "Mensagem não encontrada para o ID de vencimento: " . $vencimentoId . "<br>";
            return;
        }

        // 5. Substituindo os placeholders na mensagem
        $data_premio = $usuario['data_premio'];
        $dataFormatada = date("d/m/Y H:i:s", $data_premio);
        $mensagem = str_replace(
            ['[nome]', '[url]', '[porta]', '[login]', '[senha]', '[perfil]', '[vencimento]'],
            [$usuario['nome'], $url, $porta, $usuario['usuario'], $senha, $nomeprofile, $dataFormatada],
            $mensagem
        );

        // 6. Enviar a mensagem via WhatsApp
        $response = enviarMensagemViaWhatsApp($telefone, $mensagem, $token, $linkWhatsApp, $nomeInstancia);
        
        if ($response && isset($response['status']) && $response['status'] == "success") {
            echo "Mensagem enviada com sucesso para o usuário " . $usuario['CadUser'] . ".<br>";
        } else {
            echo "Falha ao enviar a mensagem para o usuário " . $usuario['CadUser'] . ".<br>";
        }

    } catch (PDOException $e) {
        echo 'Erro ao consultar o banco de dados para o usuário ' . $usuario['CadUser'] . ': ' . $e->getMessage() . "<br>";
    }
}
// Função genérica para enviar mensagens via WhatsApp
function enviarMensagem($usuario, $sms_preferencia, $painel_geral) {
    try {
        // 1. Recuperando o token e dados do SMS
        $sql = "SELECT user, senha, evo FROM sms WHERE cadUser = :cadUser AND bloqueado = 'N'";
        $stmt = $painel_geral->prepare($sql);
        $stmt->bindParam(':cadUser', $usuario['CadUser'], PDO::PARAM_STR);
        $stmt->execute();

        if ($stmt->rowCount() > 0) {
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            $token = $result['user'];       // O valor de 'user' no banco será o $token
            $linkWhatsApp = $result['senha']; 
            $nomeInstancia = $result['evo']; 
        } else {
            echo "Usuário não encontrado no banco de dados.<br>";
            return;
        }

        // 2. Preparando o número de telefone
        $numero = preg_replace('/\D/', '', $usuario['celular']); // Remove tudo que não é número
        $numero = ajustarNumeroTelefone($numero);  // Ajuste do número de telefone (se necessário)
        $telefone = "55" . $numero; // Adiciona o código do país

        // 3. Recuperando o ID de vencimento da tabela sms_preferencias
        $query_sms = "SELECT Renovacao FROM sms_preferencias WHERE CadUser = :CadUser";
        $stmt_sms = $painel_geral->prepare($query_sms);
        $stmt_sms->bindParam(':CadUser', $usuario['CadUser']);
        $stmt_sms->execute();
        $sms_preferencia1 = $stmt_sms->fetch(PDO::FETCH_ASSOC);

        if (!$sms_preferencia1 || !isset($sms_preferencia1['Renovacao']) || $sms_preferencia1['Renovacao'] <= 0) {
            echo "ID de vencimento inválido para o usuário " . $usuario['CadUser'] . ".<br>";
            return;
        }

        $vencimentoId = intval($sms_preferencia1['Renovacao']);  // ID de vencimento

        // 4. Recuperando a mensagem com base no ID de vencimento
        $mensagem = obterMensagem($vencimentoId, $painel_geral);  // Função que retorna a mensagem baseada no ID
        if (empty($mensagem)) {
            echo "Mensagem não encontrada para o ID de vencimento: " . $vencimentoId . "<br>";
            return;
        }

        // 5. Substituindo os placeholders na mensagem
        $data_premio = $usuario['data_premio'];
        $dataFormatada = date("d/m/Y H:i:s", $data_premio);
        $mensagem = str_replace(
            ['[nome]', '[url]', '[porta]', '[login]', '[senha]', '[perfil]', '[vencimento]'],
            [$usuario['nome'], $url, $porta, $usuario['usuario'], $senha, $nomeprofile, $dataFormatada],
            $mensagem
        );

        // 6. Enviar a mensagem via WhatsApp
        $response = enviarMensagemViaWhatsApp($telefone, $mensagem, $token, $linkWhatsApp, $nomeInstancia);
        
        if ($response && isset($response['status']) && $response['status'] == "success") {
            echo "Mensagem enviada com sucesso para o usuário " . $usuario['CadUser'] . ".<br>";
        } else {
            echo "Falha ao enviar a mensagem para o usuário " . $usuario['CadUser'] . ".<br>";
        }

    } catch (PDOException $e) {
        echo 'Erro ao consultar o banco de dados para o usuário ' . $usuario['CadUser'] . ': ' . $e->getMessage() . "<br>";
    }
}
function obterDadosEmailDoBanco($usuario, $painel_geral) {
    try {
        // Consulta para obter os dados de email
        $sql = "SELECT servidor, exibicao, email, usuario, senha, Host, Port FROM email_adicionar WHERE CadUser = :CadUser AND bloqueado = 'N'";
        $stmt = $painel_geral->prepare($sql);
        $stmt->bindParam(':CadUser', $usuario['CadUser'], PDO::PARAM_STR);
        $stmt->execute();

        // Verificando se algum dado foi retornado
        if ($stmt->rowCount() > 0) {
            $result = $stmt->fetch(PDO::FETCH_ASSOC);

            // Atribuindo os dados de email
            $dados_email = [
                'servidor' => $result['servidor'],
                'exibicao' => $result['exibicao'],
                'email' => $result['email'],
                'usuario' => $result['usuario'],
                'senha' => $result['senha'],
                'host' => $result['Host'],
                'port' => $result['Port']
            ];

            // Depuração: Exibindo os dados obtidos do banco
            echo "<br>--- Dados de Email Obtidos do Banco ---<br>";
            echo "Dados de email: " . print_r($dados_email, true) . "<br>";
            echo "--- Fim da Depuração ---<br>";

            return $dados_email;
        } else {
            // Caso o usuário não seja encontrado no banco
            echo "Usuário não encontrado no banco de dados.<br>";
            return null;  // Retorna null caso o usuário não seja encontrado
        }
    } catch (PDOException $e) {
        echo "Erro ao consultar o banco de dados para obter os dados de email: " . $e->getMessage() . "<br>";
        return null;
    }
}

function enviarMensagemEmail($usuario, $email_preferencia, $painel_geral) {
    try {
        
        $dados_email = obterDadosEmailDoBanco($usuario, $painel_geral);

       

        // 3. Recuperando o ID de vencimento da tabela sms_preferencias
        $query_sms = "SELECT Renovacao FROM email_preferencias WHERE CadUser = :CadUser";
        $stmt_sms = $painel_geral->prepare($query_sms);
        $stmt_sms->bindParam(':CadUser', $usuario['CadUser']);
        $stmt_sms->execute();
        $email_preferencia1 = $stmt_sms->fetch(PDO::FETCH_ASSOC);

        if (!$email_preferencia1 || !isset($email_preferencia1['Renovacao']) || $email_preferencia1['Renovacao'] <= 0) {
            echo "ID de vencimento inválido para o usuário " . $usuario['CadUser'] . ".<br>";
            return;
        }

        $vencimentoIdEmail = intval($email_preferencia1['Renovacao']);  // ID de vencimento
        

        // 4. Recuperando a mensagem com base no ID de vencimento
        $mensagememail = obterMensagemEmail2($vencimentoIdEmail, $painel_geral);  // Função que retorna a mensagem baseada no ID
        if (empty($mensagememail)) {
            echo "Mensagem email não encontrada para o ID de vencimento: " . $vencimentoIdEmail . "<br>";
            return;
        }
              
        $response = enviarMensagemViaEmail($usuario, $email_preferencia, $dados_email, $mensagememail);
        
        
        if ($response && isset($response['status']) && $response['status'] == "success") {
            echo "Mensagem enviada com sucesso para o usuário " . $usuario['CadUser'] . ".<br>";
        } else {
            echo "Falha ao enviar a mensagem para o usuário " . $usuario['CadUser'] . ".<br>";
        }

    } catch (PDOException $e) {
        echo 'Erro ao consultar o banco de dados para o usuário ' . $usuario['CadUser'] . ': ' . $e->getMessage() . "<br>";
    }
}

// Função auxiliar para ajustar o número de telefone (adicionando o "9" se necessário)
function ajustarNumeroTelefone($numero) {
    if ($numero[2] !== '9') {
        $numero = substr($numero, 0, 2) . '9' . substr($numero, 2); // Ajusta o número para adicionar o "9"
    }
    return $numero;
}

// Função para obter a mensagem do banco com base no ID de vencimento
function obterMensagem($vencimentoId, $painel_geral) {
    try {
        $sql = "SELECT mensagem FROM sms_modelo WHERE id = :id";
        $stmt = $painel_geral->prepare($sql);
        $stmt->bindParam(':id', $vencimentoId, PDO::PARAM_INT);
        $stmt->execute();

        if ($stmt->rowCount() > 0) {
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            return $result['mensagem'];  // Retorna a mensagem encontrada
            
        } else {
            echo "Mensagem não encontrada para o ID de vencimento: " . $vencimentoId . "<br>";
            return '';
        }
    } catch (PDOException $e) {
        echo 'Erro ao consultar o banco de dados para a mensagem: ' . $e->getMessage() . "<br>";
        return '';
    }
    $mensagem = str_replace(
        ['[nome]', '[url]', '[porta]', '[login]', '[senha]', '[perfil]', '[vencimento]'],
        [$nome2, $url, $porta, $usuario2, $senha, $nomeprofile, $dataFormatada],
        $mensagem
    );
}

function obterMensagemEmail2($vencimentoIdEmail, $painel_geral) {
    try {           
        // Depuração: Mostrar o ID de vencimento que está sendo buscado
        echo "Buscando mensagem para o ID de vencimento: " . $vencimentoIdEmail . "<br>";

        $sql = "SELECT mensagem FROM email_modelo WHERE id = :id";
        $stmt = $painel_geral->prepare($sql);
        $stmt->bindParam(':id', $vencimentoIdEmail, PDO::PARAM_INT);
        
        // Depuração: Verificar se a consulta foi preparada corretamente
        echo "SQL preparado com sucesso.<br>";

        $stmt->execute();
        
        // Depuração: Verificar se a execução retornou resultados
        echo "Linhas retornadas: " . $stmt->rowCount() . "<br>";

        if ($stmt->rowCount() > 0) {
            // Depuração: Mostrar o resultado encontrado
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            echo "Mensagem encontrada: " . $result['mensagem'] . "<br>";
            
            return $result['mensagem'];  // Retorna a mensagem encontrada
            
        } else {
            // Depuração: Caso não tenha encontrado resultados
            echo "Mensagem não encontrada para o ID de vencimento: " . $vencimentoIdEmail . "<br>";
            return '';
        }
    } catch (PDOException $e) {
        // Depuração: Exibir o erro ao conectar no banco de dados
        echo 'Erro ao consultar o banco de dados para a mensagem: ' . $e->getMessage() . "<br>";
        return '';
    }
    
}


// Função para enviar a mensagem via WhatsApp
function enviarMensagemViaWhatsApp($numero, $mensagem, $token, $linkWhatsApp, $nomeInstancia) {
    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => $linkWhatsApp . '/message/sendText/' . $nomeInstancia,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "Content-Type: application/json",
            "apikey: $token"
        ],
        CURLOPT_POSTFIELDS => json_encode(['number' => $numero, 'text' => $mensagem])
    ]);

    $response = curl_exec($curl);

    if ($response === false) {
        echo "Erro no CURL: " . curl_error($curl) . "<br>";
    }

    curl_close($curl);

    return json_decode($response, true);  // Retorna a resposta decodificada como array associativo
}


function enviarMensagemViaEmail($usuario, $email_preferencia, $dados_email, $mensagememail) {
    
    // Depuração: Mostrar os dados recebidos
    echo "<br>--- Início da Depuração ---<br>";
    echo "Usuário: " . print_r($usuario, true) . "<br>";
    echo "Preferência de Email: " . print_r($email_preferencia, true) . "<br>";
    
    // Depuração detalhada dos dados_email
    echo "Dados de Email: <br>";
    foreach ($dados_email as $chave => $valor) {
        echo "[$chave] => $valor<br>";
    }
    
    echo "Mensagem: " . $mensagememail . "<br>";
    echo "<br>--- Fim da Depuração ---<br>";
    $mensagememail = str_replace(
        ['[nome]', '[url]', '[porta]', '[login]', '[senha]', '[perfil]', '[vencimento]'],
        [
            $usuario['nome'],  // Nome do usuário
            'https://painelcshd.sytes.net/painelevo/pagamento.php', // URL de pagamento
            'porta_exemplo', // Porta exemplo
            $usuario['usuario'], // Login do usuário
            'senha_exemplo', // Senha exemplo
            $email_preferencia['perfil'], // Perfil do email
            date("d/m/Y H:i:s", $usuario['data_premio']) // Data formatada
        ],
        $mensagememail
    );

    $mail = new PHPMailer(true);
    $mail->CharSet = 'UTF-8';  // Define o charset para UTF-8 (necessário para caracteres especiais como acentos)
    $mail->setLanguage('pt', '/path/to/language/directory'); // Define o idioma do PHPMailer como pt-BR

    try {
        // Configuração do servidor SMTP
        $mail->isSMTP();
        echo "Configurando servidor SMTP...<br>";
        $mail->Host = $dados_email['host'];  // Servidor SMTP
        echo "Host SMTP: " . $dados_email['host'] . "<br>";

        $mail->SMTPAuth = true;
        echo "SMTP Auth: Ativado<br>";

        $mail->Username = $dados_email['email'];  // Usuário do email
        echo "Username: " . $dados_email['email'] . "<br>";

        $mail->Password = $dados_email['senha'];  // Senha do email
        echo "Senha: " . $dados_email['senha'] . "<br>";

        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        echo "SMTPSecure: STARTTLS<br>";

        $mail->Port = $dados_email['port'];  // Porta SMTP
        echo "Porta SMTP: " . $dados_email['port'] . "<br>";

        // Remetente e destinatário
        $mail->setFrom($dados_email['email'], $dados_email['exibicao']);
        echo "Remetente: " . $dados_email['email'] . " (" . $dados_email['exibicao'] . ")<br>";

        $mail->addAddress($usuario['email']);  // Destinatário
        echo "Destinatário: " . $usuario['email'] . "<br>";

        // Conteúdo do email
        $mail->isHTML(true);
        $mail->Subject = 'Notificação de Vencimento';
        echo "Assunto: Notificação de Vencimento<br>";

        $mail->Body    = $mensagememail;
        echo "Corpo da mensagem: " . $mensagememail . "<br>";

        // Envia o email
        if($mail->send()) {
            echo "Email enviado com sucesso para o usuário " . $usuario['CadUser'] . ".<br>";
        } else {
            echo "Falha ao enviar o email para o usuário " . $usuario['CadUser'] . ".<br>";
        }
    } catch (Exception $e) {
        // Depuração: Exibir erro ao tentar enviar o email
        echo "Erro ao enviar o email para o usuário " . $usuario['CadUser'] . ": " . $mail->ErrorInfo . "<br>";
    }
}




// Exibe os resultados para vencendo
echo "<h2>Vencendo:</h2>";
if (count($vencendo) > 0) {
    foreach ($vencendo as $usuario) {
        echo "<h3>Usuário Vencendo:</h3>";
        echo "CadUser: " . $usuario['CadUser'] . "<br>";
        echo "Email: " . $usuario['email'] . "<br>";
        echo "Celular: " . $usuario['celular'] . "<br>";
        echo "Data do prêmio: " . date('d/m/Y H:i:s', $usuario['data_premio']) . "<br>";

        if (!empty($usuario['celular'])) {
            // Consulta na tabela painel_geral para verificar a preferência de vencimento por celular
            $query_sms = "SELECT Renovacao FROM sms_preferencias WHERE CadUser = :CadUser";
            $stmt_sms = $painel_geral->prepare($query_sms);
            $stmt_sms->bindParam(':CadUser', $usuario['CadUser']);
            $stmt_sms->execute();
            $sms_preferencia1 = $stmt_sms->fetch(PDO::FETCH_ASSOC);
            if ($sms_preferencia1) {
                echo "Preferência de Vencimento (Celular): " . $sms_preferencia1['Renovacao'] . "<br>";
                
                // Envia a mensagem via WhatsApp
                enviarMensagem($usuario, $sms_preferencia1, $painel_geral);
            }
        }
    }
} else {
    echo "Nenhum prêmio vencendo no momento.<br>";
}

// Exibe os resultados para vencido
echo "<h2>Vencido:</h2>";
if (count($vencido) > 0) {
    foreach ($vencido as $usuario) {
        echo "<h3>Usuário Vencido:</h3>";
        echo "CadUser: " . $usuario['CadUser'] . "<br>";
        echo "Email: " . $usuario['email'] . "<br>";
        echo "Celular: " . $usuario['celular'] . "<br>";
        echo "Data do prêmio: " . date('d/m/Y H:i:s', $usuario['data_premio']) . "<br>";

        if (!empty($usuario['celular'])) {
            // Consulta na tabela painel_geral para verificar a preferência de vencimento por celular
            $query_sms = "SELECT Vencimento FROM sms_preferencias WHERE CadUser = :CadUser";
            $stmt_sms = $painel_geral->prepare($query_sms);
            $stmt_sms->bindParam(':CadUser', $usuario['CadUser']);
            $stmt_sms->execute();
            $sms_preferencia = $stmt_sms->fetch(PDO::FETCH_ASSOC);
            if ($sms_preferencia) {
                echo "Preferência de Vencimento (Celular): " . $sms_preferencia['Vencimento'] . "<br>";
                
                // Envia a mensagem via WhatsApp
                enviarMensagemVencido($usuario, $sms_preferencia, $painel_geral);
            }
        }
        if (!empty($usuario['email'])) {
            // Consulta na tabela painel_geral para verificar a preferência de vencimento por celular
            $query_sms = "SELECT Vencimento FROM email_preferencias WHERE CadUser = :CadUser";
            $stmt_sms = $painel_geral->prepare($query_sms);
            $stmt_sms->bindParam(':CadUser', $usuario['CadUser']);
            $stmt_sms->execute();
            $email_preferencia = $stmt_sms->fetch(PDO::FETCH_ASSOC);
            if ($email_preferencia) {
                echo "Preferência de Vencimento (Email): " . $email_preferencia['Vencimento'] . "<br>";
                
                // Envia a mensagem via WhatsApp
                enviarMensagemEmail($usuario, $email_preferencia, $painel_geral);
            }
        }
    }
} else {
    echo "Nenhum prêmio vencido no momento.<br>";
}
?>
