<?php
// ==============================================================================
// MOTOR DE ENVIO SMTP COM DEBUG (MODO ESPIÃO)
// ==============================================================================

function enviarEmailSMTP($para, $assunto, $mensagem_html) {
    global $pdo;

    // 1. Busca configs
    $smtp = $pdo->query("SELECT * FROM config_smtp WHERE id=1")->fetch();
    $loja = $pdo->query("SELECT * FROM config_loja WHERE id=1")->fetch();

    if (!$smtp || empty($smtp['host'])) return "Erro: Configure o SMTP no Painel Admin.";

    $host = $smtp['host'];     // Ex: mail.seusite.com
    $user = $smtp['email'];    // Ex: contato@seusite.com
    $pass = $smtp['senha'];    // A senha do e-mail
    $port = $smtp['porta'];    // 465 (SSL) ou 587 (TLS)
    $nome = $loja['nome_loja'] ?? 'Suporte';

    // Log para debug (aparecerá na tela se der erro)
    $log = "";

    // 2. Conexão Socket
    $protocolo = ($port == 465) ? "ssl://" : ""; // Adiciona ssl:// se for 465
    $conn = fsockopen($protocolo . $host, $port, $errno, $errstr, 15);

    if (!$conn) {
        return "FALHA DE CONEXÃO: Não foi possível conectar em $host:$port. Erro: $errstr ($errno). Verifique se a porta 465 está liberada na sua hospedagem.";
    }

    // Função interna para conversar com o servidor
    function serverCmd($conn, $cmd, &$log) {
        if($cmd) { fputs($conn, $cmd . "\r\n"); }
        $resp = fgets($conn, 512);
        $log .= "<b>CMD:</b> $cmd <br> <b>RESP:</b> $resp <br>";
        return $resp;
    }

    // 3. O Diálogo SMTP
    $log .= "Conectado... <br>";
    serverCmd($conn, "", $log); // Leitura inicial
    
    serverCmd($conn, "EHLO " . $_SERVER['HTTP_HOST'], $log);
    serverCmd($conn, "AUTH LOGIN", $log);
    
    // Envia Usuário e Senha em Base64
    $rUser = serverCmd($conn, base64_encode($user), $log);
    $rPass = serverCmd($conn, base64_encode($pass), $log);

    // Se falhar a senha, para aqui
    if (strpos($rUser, '535') !== false || strpos($rPass, '535') !== false) {
        return "ERRO DE AUTENTICAÇÃO: Usuário ou Senha do E-mail incorretos. <br><br>Log:<br>$log";
    }

    // Cabeçalhos do E-mail
    serverCmd($conn, "MAIL FROM: <$user>", $log);
    $rRcpt = serverCmd($conn, "RCPT TO: <$para>", $log);
    
    // Se o email de destino for rejeitado
    if (strpos($rRcpt, '550') !== false || strpos($rRcpt, '553') !== false) {
        return "ERRO DE DESTINATÁRIO: O servidor recusou enviar para $para. Pode ser considerado Spam ou Relay negado. <br><br>Log:<br>$log";
    }

    serverCmd($conn, "DATA", $log);

    // Monta o corpo
    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
    $headers .= "Date: " . date('r') . "\r\n";
    $headers .= "From: $nome <$user>\r\n";
    $headers .= "To: $para\r\n";
    $headers .= "Subject: $assunto\r\n";
    $headers .= "X-Mailer: PHP/SMTP\r\n"; // Ajuda a não cair no spam

    fputs($conn, "$headers\r\n$mensagem_html\r\n.\r\n");
    $result = fgets($conn, 512); // Resposta final do envio
    $log .= "<b>ENVIO:</b> $result <br>";

    serverCmd($conn, "QUIT", $log);
    fclose($conn);

    // 4. Resultado
    if (strpos($result, '250') !== false) {
        return true;
    } else {
        return "FALHA NO ENVIO FINAL. O servidor não aceitou a mensagem. <br> <div style='background:#000; color:#0f0; padding:10px; font-family:monospace;'>$log</div>";
    }
}
?>