<?php
// envio_email.php (SISTEMA DE ENVIO DE E-MAILS)
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php'; // Requer instalação do PHPMailer via Composer

/**
 * Função para enviar e-mail usando PHPMailer
 */
function enviarEmail($dados_email) {
    try {
        $mail = new PHPMailer(true);
        $config = $dados_email['config_email'];
        
        // Configurações do servidor
        $mail->isSMTP();
        $mail->Host = $config['servidor_smtp'];
        $mail->SMTPAuth = true;
        $mail->Username = $config['usuario_smtp'];
        $mail->Password = $config['senha_smtp'];
        $mail->SMTPSecure = $config['criptografia'];
        $mail->Port = $config['porta_smtp'];
        $mail->CharSet = 'UTF-8';
        
        // Remetente
        $mail->setFrom($config['email_remetente'], $config['nome_remetente']);
        
        // Destinatário
        $mail->addAddress($dados_email['para_email'], $dados_email['para_nome']);
        
        // Conteúdo
        $mail->isHTML(true);
        $mail->Subject = $dados_email['assunto'];
        $mail->Body = nl2br($dados_email['mensagem']);
        $mail->AltBody = strip_tags($dados_email['mensagem']);
        
        // Enviar
        $mail->send();
        error_log("✅ E-mail enviado com sucesso para: " . $dados_email['para_email']);
        return true;
        
    } catch (Exception $e) {
        error_log("❌ Erro ao enviar e-mail: " . $mail->ErrorInfo);
        return false;
    }
}

/**
 * Processar fila de e-mails agendados
 */
function processarFilaEmails($conn) {
    error_log("📧 PROCESSANDO FILA DE E-MAILS");
    
    $sql = "SELECT ae.*, ceu.* 
            FROM agendamentos_email ae
            JOIN configuracoes_email_usuario ceu ON ae.usuario_id = ceu.usuario_id 
            WHERE ae.status = 'agendado' 
            AND ae.data_agendamento <= NOW() 
            AND ae.tentativas < 3";
    
    $result = $conn->query($sql);
    $enviados = 0;
    $erros = 0;
    
    while ($agendamento = $result->fetch_assoc()) {
        $dados_email = [
            'para_email' => $agendamento['email_destinatario'],
            'para_nome' => '', // Poderia buscar do cliente se necessário
            'assunto' => $agendamento['assunto'],
            'mensagem' => $agendamento['mensagem'],
            'config_email' => $agendamento
        ];
        
        if (enviarEmail($dados_email)) {
            // Marcar como enviado
            $sql_update = "UPDATE agendamentos_email SET 
                          status = 'enviado', data_envio = NOW(), tentativas = tentativas + 1 
                          WHERE id = ?";
            $stmt = $conn->prepare($sql_update);
            $stmt->bind_param("i", $agendamento['id']);
            $stmt->execute();
            $stmt->close();
            $enviados++;
        } else {
            // Incrementar tentativas
            $sql_update = "UPDATE agendamentos_email SET 
                          tentativas = tentativas + 1 
                          WHERE id = ?";
            $stmt = $conn->prepare($sql_update);
            $stmt->bind_param("i", $agendamento['id']);
            $stmt->execute();
            $stmt->close();
            $erros++;
        }
    }
    
    error_log("📧 RESUMO FILA: $enviados enviados, $erros erros");
    return ['enviados' => $enviados, 'erros' => $erros];
}

/**
 * Testar configuração de e-mail
 */
function testarConfiguracaoEmail($config_email) {
    try {
        $mail = new PHPMailer(true);
        
        // Configurações do servidor
        $mail->isSMTP();
        $mail->Host = $config_email['servidor_smtp'];
        $mail->SMTPAuth = true;
        $mail->Username = $config_email['usuario_smtp'];
        $mail->Password = $config_email['senha_smtp'];
        $mail->SMTPSecure = $config_email['criptografia'];
        $mail->Port = $config_email['porta_smtp'];
        $mail->Timeout = 10; // Timeout reduzido para teste
        
        // Testar conexão
        if (!$mail->smtpConnect()) {
            throw new Exception("Falha na conexão SMTP");
        }
        $mail->smtpClose();
        
        return ['success' => true, 'message' => 'Conexão SMTP testada com sucesso!'];
        
    } catch (Exception $e) {
        return ['success' => false, 'message' => 'Erro na conexão: ' . $e->getMessage()];
    }
}
?>