<?php

namespace NewsletterBridge\Utils;

/**
 * Classe utility per inviare notifiche email in caso di errori
 */
class ErrorNotification
{
    /**
     * Email destinatario per le notifiche di errore
     */
    private const ERROR_EMAIL = 'techteam@blazemedia.it';

    /**
     * Invia notifica email in caso di errore
     *
     * @param string $errorType Tipo di errore
     * @param string $errorMessage Messaggio di errore
     * @param \Throwable|null $exception Eccezione originale (opzionale)
     * @return bool True se l'email è stata inviata con successo, false altrimenti
     */
    public static function send(string $errorType, string $errorMessage, ?\Throwable $exception = null): bool
    {
        try {
            $to = self::ERROR_EMAIL;
            $subject = '[Newsletter Bridge] Errore invio newsletter - ' . $errorType;

            $site_name = function_exists('get_bloginfo') ? get_bloginfo('name') : 'WordPress';
            $site_url = function_exists('get_site_url') ? get_site_url() : 'N/A';
            $timestamp = function_exists('current_time') ? current_time('Y-m-d H:i:s') : date('Y-m-d H:i:s');

            $stackTrace = '';
            if ($exception) {
                $stackTrace = $exception->getTraceAsString();
            }

            $message = self::buildEmailMessage($errorType, $errorMessage, $timestamp, $site_name, $site_url, $stackTrace);

            $headers = self::buildEmailHeaders($site_url);

            $sent = wp_mail($to, $subject, $message, $headers);

            if ($sent) {
                $logMessage = 'Email di notifica errore inviata a ' . self::ERROR_EMAIL;
                Log::info($logMessage);
                
                // Se siamo in WP-CLI, logga anche lì
                if (defined('WP_CLI') && WP_CLI && class_exists('\WP_CLI')) {
                    \WP_CLI::log('📧 ' . $logMessage);
                }
                
                return true;
            } else {
                $warningMessage = 'Impossibile inviare email di notifica errore';
                Log::warning($warningMessage);
                
                // Se siamo in WP-CLI, logga anche lì
                if (defined('WP_CLI') && WP_CLI && class_exists('\WP_CLI')) {
                    \WP_CLI::warning('⚠️ ' . $warningMessage);
                }
                
                return false;
            }
        } catch (\Throwable $e) {
            $errorMsg = 'Errore nell\'invio email di notifica: ' . $e->getMessage();
            Log::warning($errorMsg);
            
            // Se siamo in WP-CLI, logga anche lì
            if (defined('WP_CLI') && WP_CLI && class_exists('\WP_CLI')) {
                \WP_CLI::warning('⚠️ ' . $errorMsg);
            }
            
            return false;
        }
    }

    /**
     * Costruisce il messaggio email HTML
     */
    private static function buildEmailMessage(
        string $errorType,
        string $errorMessage,
        string $timestamp,
        string $site_name,
        string $site_url,
        string $stackTrace
    ): string {
        $stackTraceSection = '';
        if ($stackTrace) {
            $stackTraceSection = "
        <div style='background: #fff3cd; padding: 15px; border-radius: 3px; margin: 15px 0; border-left: 4px solid #ffc107;'>
            <h3 style='margin-top: 0; color: #856404;'>Stack Trace</h3>
            <pre style='background: #f8f9fa; padding: 10px; border-radius: 3px; overflow-x: auto; font-size: 12px;'>" . htmlspecialchars($stackTrace) . "</pre>
        </div>";
        }

        return "
<html>
<head>
    <title>Errore Newsletter Bridge</title>
</head>
<body style='font-family: Arial, sans-serif; line-height: 1.6; color: #333;'>
    <div style='max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #ddd; border-radius: 5px;'>
        <h2 style='color: #d63638; margin-top: 0;'>🚨 Errore Newsletter Bridge</h2>
        
        <div style='background: #f8f9fa; padding: 15px; border-radius: 3px; margin: 15px 0;'>
            <h3 style='margin-top: 0; color: #495057;'>Dettagli Errore</h3>
            <p><strong>Tipo:</strong> " . htmlspecialchars($errorType) . "</p>
            <p><strong>Messaggio:</strong> " . htmlspecialchars($errorMessage) . "</p>
            <p><strong>Timestamp:</strong> " . htmlspecialchars($timestamp) . "</p>
            <p><strong>Sito:</strong> " . htmlspecialchars($site_name) . " (" . htmlspecialchars($site_url) . ")</p>
        </div>
        {$stackTraceSection}
        <div style='background: #d1ecf1; padding: 15px; border-radius: 3px; margin: 15px 0; border-left: 4px solid #17a2b8;'>
            <h3 style='margin-top: 0; color: #0c5460;'>Azioni Consigliate</h3>
            <ul>
                <li>Verificare la configurazione MailUp</li>
                <li>Controllare i log di WordPress</li>
                <li>Testare la connessione con: <code>wp newsletter test-mailup</code></li>
                <li>Verificare la configurazione con: <code>wp newsletter test-config</code></li>
            </ul>
        </div>
        
        <hr style='border: none; border-top: 1px solid #eee; margin: 20px 0;'>
        <p style='font-size: 12px; color: #666; text-align: center;'>
            Email generata automaticamente da Newsletter Bridge Plugin
        </p>
    </div>
</body>
</html>";
    }

    /**
     * Costruisce gli header dell'email
     */
    private static function buildEmailHeaders(string $site_url): array
    {
        $host = 'noreply';
        if ($site_url && $site_url !== 'N/A') {
            $parsed = parse_url($site_url);
            if ($parsed && isset($parsed['host'])) {
                $host = $parsed['host'];
            }
        }

        return [
            'Content-Type: text/html; charset=UTF-8',
            'From: Newsletter Bridge <noreply@' . $host . '>',
            'Reply-To: noreply@' . $host
        ];
    }
}

