<?php
class ProfessionalMailer {
    
    private $domain;
    
    public function __construct() {
        $this->domain = $_SERVER['HTTP_HOST'] ?? 'localhost';
    }
    
    private function buildProfessionalHeaders($fromName, $fromEmail, $replyTo = null) {
        $messageId = $this->generateMessageId();
        $replyTo = $replyTo ?: $fromEmail;
        
        $headers = "From: \"{$fromName}\" <{$fromEmail}>\r\n";
        $headers .= "Reply-To: \"{$fromName}\" <{$replyTo}>\r\n";
        $headers .= "Return-Path: <{$fromEmail}>\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=\"utf-8\"\r\n";
        $headers .= "Content-Transfer-Encoding: quoted-printable\r\n";
        $headers .= "Message-ID: {$messageId}\r\n";
        $headers .= "Date: " . date('r') . "\r\n";
        $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
        $headers .= "X-Priority: 3\r\n";
        $headers .= "X-MSMail-Priority: Normal\r\n";
        
        return $headers;
    }
    
    private function generateMessageId() {
        return '<' . time() . '.' . uniqid() . '@' . $this->domain . '>';
    }
    
    private function encodeSubject($subject) {
        return '=?UTF-8?Q?' . quoted_printable_encode($subject) . '?=';
    }
    
    private function formatEmailBody($htmlContent) {
        // Converte para quoted-printable para melhor compatibilidade
        $htmlContent = quoted_printable_encode($htmlContent);
        
        return $htmlContent;
    }
    
    private function validateEmail($email) {
        return filter_var(trim($email), FILTER_VALIDATE_EMAIL) !== false;
    }
    
    private function validateDomain($email) {
        $domain = substr(strrchr($email, "@"), 1);
        return checkdnsrr($domain, "MX");
    }
    
    private function extractEmailData($line) {
        $data = explode(';', trim($line));
        return [
            'email' => trim($data[0] ?? ''),
            'cnpj' => trim($data[1] ?? ''),
            'razao' => trim($data[2] ?? ''),
            'city' => trim($data[3] ?? '')
        ];
    }
    
    private function replacePersonalization($content, $data) {
        $replacements = [
            '{email}' => $this->sanitize($data['email']),
            '{cnpj}' => $this->sanitize($data['cnpj']),
            '{razao}' => $this->sanitize($data['razao']),
            '{city}' => $this->sanitize($data['city']),
            '{data}' => date('d/m/Y'),
            '{hora}' => date('H:i')
        ];
        
        return str_replace(array_keys($replacements), array_values($replacements), $content);
    }
    
    private function sanitize($text) {
        return htmlspecialchars(trim($text), ENT_QUOTES, 'UTF-8');
    }
    
    public function sendBatch($postData) {
        // Validações iniciais
        if (!$this->validateEmail($postData['de'])) {
            return "<div style='color: #d63031; padding: 10px; background: #fab1a0; border-radius: 4px;'>Erro: Email do remetente inválido</div>";
        }
        
        if (!$this->validateDomain($postData['de'])) {
            return "<div style='color: #d63031; padding: 10px; background: #fab1a0; border-radius: 4px;'>Erro: Domínio do remetente não possui MX records válidos</div>";
        }
        
        $emails = array_filter(explode("\n", $postData['emails']));
        if (empty($emails)) {
            return "<div style='color: #d63031; padding: 10px; background: #fab1a0; border-radius: 4px;'>Erro: Nenhum email encontrado na lista</div>";
        }
        
        $results = [];
        $successCount = 0;
        $errorCount = 0;
        
        foreach ($emails as $index => $line) {
            $data = $this->extractEmailData($line);
            
            if (!$this->validateEmail($data['email'])) {
                $results[] = "<div style='color: #e17055; margin: 5px 0; padding: 8px; background: #ffeaa7; border-radius: 4px;'><strong>#".($index+1)."</strong> {$data['email']} - <strong>EMAIL INVÁLIDO</strong></div>";
                $errorCount++;
                continue;
            }
            
            if (!$this->validateDomain($data['email'])) {
                $results[] = "<div style='color: #e17055; margin: 5px 0; padding: 8px; background: #ffeaa7; border-radius: 4px;'><strong>#".($index+1)."</strong> {$data['email']} - <strong>DOMÍNIO INVÁLIDO</strong></div>";
                $errorCount++;
                continue;
            }
            
            // Personaliza conteúdo
            $personalizedSubject = $this->replacePersonalization($postData['assunto'], $data);
            $personalizedMessage = $this->replacePersonalization($postData['html'], $data);
            
            // Formata o corpo do email (usa o HTML exatamente como foi digitado)
            $formattedBody = $this->formatEmailBody($personalizedMessage);
            
            // Prepara headers
            $headers = $this->buildProfessionalHeaders(
                $postData['nome'], 
                $postData['de'],
                $postData['reply_to'] ?? $postData['de']
            );
            
            // Envia email
            $encodedSubject = $this->encodeSubject($personalizedSubject);
            
            if (mail($data['email'], $encodedSubject, $formattedBody, $headers)) {
                $results[] = "<div style='color: #00b894; margin: 5px 0; padding: 8px; background: #55efc4; border-radius: 4px;'><strong>#".($index+1)."</strong> {$data['email']} - <strong>ENVIADO COM SUCESSO</strong></div>";
                $successCount++;
            } else {
                $results[] = "<div style='color: #d63031; margin: 5px 0; padding: 8px; background: #fab1a0; border-radius: 4px;'><strong>#".($index+1)."</strong> {$data['email']} - <strong>ERRO NO ENVIO</strong></div>";
                $errorCount++;
            }
            
            // Pausa estratégica para evitar spam detection
            if (($index + 1) % 3 === 0) {
                sleep(2);
            }
        }
        
        $summary = "<div style='background: #2c3e50; color: white; padding: 15px; border-radius: 4px; margin-bottom: 20px;'>
                    <h3 style='margin: 0;'>Resumo do Envio</h3>
                    <p style='margin: 5px 0;'>✅ Sucessos: <strong>{$successCount}</strong></p>
                    <p style='margin: 5px 0;'>❌ Erros: <strong>{$errorCount}</strong></p>
                    <p style='margin: 5px 0;'>📊 Total: <strong>" . count($emails) . "</strong></p>
                  </div>";
        
        return $summary . implode('', $results);
    }
}

// Processamento do formulário
if ($_POST['action'] ?? '' === 'send_emails') {
    $mailer = new ProfessionalMailer();
    echo $mailer->sendBatch($_POST);
    exit;
}

// HEADER UTF-8 CORRETO NO INÍCIO DO PHP
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sistema de Comunicação Corporativa</title>
    <style>
        :root {
            --primary: #2c3e50;
            --secondary: #3498db;
            --success: #27ae60;
            --warning: #f39c12;
            --danger: #e74c3c;
            --light: #ecf0f1;
            --dark: #2c3e50;
        }
        
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            padding: 20px;
        }
        
        .container {
            max-width: 1000px;
            margin: 0 auto;
            background: white;
            border-radius: 12px;
            box-shadow: 0 15px 35px rgba(0,0,0,0.1);
            overflow: hidden;
        }
        
        .header {
            background: var(--primary);
            color: white;
            padding: 30px;
            text-align: center;
        }
        
        .header h1 {
            font-size: 28px;
            margin-bottom: 10px;
            font-weight: 300;
        }
        
        .header p {
            opacity: 0.9;
            font-size: 14px;
        }
        
        .form-container {
            padding: 30px;
        }
        
        .form-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 20px;
            margin-bottom: 20px;
        }
        
        .form-group {
            margin-bottom: 20px;
        }
        
        .form-group.full-width {
            grid-column: 1 / -1;
        }
        
        label {
            display: block;
            margin-bottom: 8px;
            font-weight: 600;
            color: var(--dark);
            font-size: 14px;
        }
        
        input[type="text"],
        textarea {
            width: 100%;
            padding: 12px 15px;
            border: 2px solid #e0e0e0;
            border-radius: 6px;
            font-size: 14px;
            transition: all 0.3s ease;
            font-family: inherit;
        }
        
        input[type="text"]:focus,
        textarea:focus {
            outline: none;
            border-color: var(--secondary);
            box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
        }
        
        textarea {
            resize: vertical;
            min-height: 120px;
        }
        
        .btn {
            background: var(--secondary);
            color: white;
            border: none;
            padding: 15px 30px;
            border-radius: 6px;
            font-size: 16px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s ease;
            display: inline-flex;
            align-items: center;
            gap: 8px;
        }
        
        .btn:hover {
            background: #2980b9;
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(0,0,0,0.2);
        }
        
        .btn i {
            font-size: 18px;
        }
        
        .tips {
            background: var(--light);
            padding: 20px;
            border-radius: 6px;
            margin-bottom: 20px;
        }
        
        .tips h3 {
            color: var(--primary);
            margin-bottom: 10px;
        }
        
        .tips ul {
            list-style: none;
            padding-left: 0;
        }
        
        .tips li {
            padding: 5px 0;
            display: flex;
            align-items: center;
            gap: 8px;
        }
        
        .tips li:before {
            content: "✅";
            font-size: 12px;
        }
        
        .results {
            margin-top: 30px;
            max-height: 500px;
            overflow-y: auto;
        }
        
        .placeholder-guide {
            background: #e8f4fd;
            border-left: 4px solid var(--secondary);
            padding: 15px;
            margin-bottom: 20px;
        }
        
        .placeholder-guide h4 {
            color: var(--primary);
            margin-bottom: 10px;
        }
        
        .placeholder-item {
            display: inline-block;
            background: white;
            padding: 4px 8px;
            margin: 2px;
            border-radius: 3px;
            font-family: monospace;
            font-size: 12px;
            border: 1px solid #ddd;
        }
        
        @media (max-width: 768px) {
            .form-grid {
                grid-template-columns: 1fr;
            }
            
            .container {
                margin: 10px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>📧 Sistema de Comunicação Corporativa</h1>
            <p>Envio profissional de emails com alta taxa de entrega</p>
        </div>
        
        <div class="form-container">
            <div class="placeholder-guide">
                <h4>🚀 Variáveis de Personalização Disponíveis:</h4>
                <span class="placeholder-item">{email}</span>
                <span class="placeholder-item">{cnpj}</span>
                <span class="placeholder-item">{razao}</span>
                <span class="placeholder-item">{city}</span>
                <span class="placeholder-item">{data}</span>
                <span class="placeholder-item">{hora}</span>
            </div>
            
            <div class="tips">
                <h3>💡 Dicas para Melhor Entregabilidade:</h3>
                <ul>
                    <li>Use remetentes válidos com domínios verificados</li>
                    <li>Assuntos claros e profissionais</li>
                    <li>Conteúdo relevante e bem formatado</li>
                    <li>Evite palavras suspeitas como "urgente", "grátis", "oferta"</li>
                    <li>Personalize o conteúdo para cada destinatário</li>
                </ul>
            </div>
            
            <form id="emailForm" method="post">
                <input type="hidden" name="action" value="send_emails">
                
                <div class="form-grid">
                    <div class="form-group">
                        <label for="nome">📛 Nome do Remetente:</label>
                        <input type="text" id="nome" name="nome" value="Secretaria Municipal" required>
                    </div>
                    
                    <div class="form-group">
                        <label for="de">📧 Email do Remetente:</label>
                        <input type="text" id="de" name="de" value="fornecedores@secretariamunicipal.com" required>
                    </div>
                </div>
                
                <div class="form-group">
                    <label for="assunto">📝 Assunto do Email:</label>
                    <input type="text" id="assunto" name="assunto" value="Comunicação Oficial - {razao}" required>
                </div>
                
                <div class="form-group">
                    <label for="html">💬 Mensagem (HTML):</label>
                    <textarea id="html" name="html" required>Prezado(a) responsável pela empresa {razao},

Esperamos que esta mensagem o(a) encontre bem. Estamos entrando em contato para tratar de assuntos referentes às suas instalações localizadas em {city}.

Agradecemos pela atenção e permanecemos à disposição para quaisquer esclarecimentos adicionais.</textarea>
                </div>
                
                <div class="form-group">
                    <label for="emails">📋 Lista de Destinatários:</label>
                    <textarea id="emails" name="emails" required placeholder="email@exemplo.com;CNPJ;Razão Social;Cidade" rows="8">pedrocode_anselmo@proton.me;01.111.111/0001-96;SUPERMERCADO OBA OBA LTDA;SÃO PAULO-SP
contato@clickitecnologia.com.br;01.111.111/0001-96;SUPERMERCADO OBA OBA LTDA;SÃO PAULO-SP
danilorochafb01@gmail.com;01.111.111/0001-96;SUPERMERCADO OBA OBA LTDA;SÃO PAULO-SP
juscelino_luiz@uol.com.br;01.111.111/0001-96;SUPERMERCADO OBA OBA LTDA;SÃO PAULO-SP</textarea>
                    <small style="color: #666; font-size: 12px;">Formato: email;cnpj;razão social;cidade (um por linha)</small>
                </div>
                
                <button type="submit" class="btn">
                    <span>📤 Iniciar Envio Profissional</span>
                </button>
            </form>
            
            <div id="results" class="results"></div>
        </div>
    </div>

    <script>
        document.getElementById('emailForm').addEventListener('submit', function(e) {
            e.preventDefault();
            
            const btn = this.querySelector('button[type="submit"]');
            const originalText = btn.innerHTML;
            btn.innerHTML = '⏳ Enviando...';
            btn.disabled = true;
            
            const formData = new FormData(this);
            
            fetch('', {
                method: 'POST',
                body: formData
            })
            .then(response => response.text())
            .then(data => {
                document.getElementById('results').innerHTML = data;
                btn.innerHTML = originalText;
                btn.disabled = false;
            })
            .catch(error => {
                document.getElementById('results').innerHTML = '<div style="color: #d63031; padding: 15px; background: #fab1a0; border-radius: 4px;">Erro no envio: ' + error + '</div>';
                btn.innerHTML = originalText;
                btn.disabled = false;
            });
        });
    </script>
</body>
</html>