<?php

namespace App\Services;

use App\Models\User;
use App\Models\Notification;
use App\Models\Setting;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Mail;

class NotificationService
{
    /**
     * Types de notifications disponibles
     */
    const TYPE_INFO = 'info';
    const TYPE_SUCCESS = 'success';
    const TYPE_WARNING = 'warning';
    const TYPE_ALERT = 'alert';
    const TYPE_PROMOTION = 'promotion';
    const TYPE_SYSTEM = 'system';
    const TYPE_ORDER = 'order';
    const TYPE_COMMISSION = 'commission';

    public function send(User $user, $type, $title, $message, $data = [], $actionUrl = null)
    {
        $notification = Notification::create([
            'user_id' => $user->id,
            'type' => $type,
            'title' => $title,
            'message' => $message,
            'data' => $data,
            'action_url' => $actionUrl,
        ]);

        if ($user->email_notifications ?? true) {
            $this->sendEmail($user, $title, $message);
        }

        if (Setting::get('telegram_notifications_enabled') && $user->telegram_chat_id) {
            $this->sendTelegram($user->telegram_chat_id, "{$title}\n\n{$message}");
        }

        return $notification;
    }

    /**
     * Envoi statique rapide avec email et Telegram
     * 
     * @param int $userId ID de l'utilisateur
     * @param string $type Type de notification
     * @param string $title Titre
     * @param string $message Message
     * @param array $data Données additionnelles (JSON)
     * @param string|null $actionUrl URL d'action
     * @param bool $sendEmail Envoyer par email (défaut: true)
     * @param bool $sendTelegram Envoyer par Telegram (défaut: true)
     */
    public static function notify(
        int $userId, 
        string $type, 
        string $title, 
        string $message, 
        array $data = [], 
        ?string $actionUrl = null,
        bool $sendEmail = true,
        bool $sendTelegram = true
    ): Notification {
        // 1. Créer la notification en base de données
        $notification = Notification::create([
            'user_id' => $userId,
            'type' => $type,
            'title' => $title,
            'message' => $message,
            'data' => $data,
            'action_url' => $actionUrl,
        ]);

        // 2. Envoyer par email si activé (en arrière-plan pour ne pas bloquer)
        if ($sendEmail) {
            try {
                self::sendEmailStatic($userId, $title, $message, $actionUrl);
            } catch (\Exception $e) {
                Log::warning('Erreur envoi email notification (non bloquant): ' . $e->getMessage(), [
                    'user_id' => $userId,
                    'title' => $title
                ]);
            }
        }

        // 3. Envoyer par Telegram si activé
        if ($sendTelegram) {
            try {
                self::sendTelegramStatic($userId, $title, $message);
            } catch (\Exception $e) {
                Log::warning('Erreur envoi Telegram notification (non bloquant): ' . $e->getMessage(), [
                    'user_id' => $userId,
                    'title' => $title
                ]);
            }
        }

        return $notification;
    }

    /**
     * Envoi email statique (pour utilisation dans notify())
     */
    protected static function sendEmailStatic(int $userId, string $title, string $message, ?string $actionUrl = null): void
    {
        // Vérifier si les notifications email sont activées globalement
        if (!Setting::get('email_notifications_enabled', true)) {
            return;
        }

        $user = User::find($userId);
        if (!$user || !$user->email) {
            return;
        }

        // Vérifier si l'utilisateur a activé les notifications email
        if (!($user->email_notifications ?? true)) {
            return;
        }

        // Ne pas envoyer d'email pour les types moins importants (évite le spam)
        $emailTypes = [
            self::TYPE_SUCCESS,
            self::TYPE_ALERT,
            self::TYPE_ORDER,
            self::TYPE_COMMISSION,
        ];
        
        // Déterminer si ce type mérite un email
        // On peut commenter cette section si on veut TOUS les emails
        // if (!in_array($type, $emailTypes)) {
        //     return;
        // }

        $appName = config('app.name', 'Bijoux Express');
        $appUrl = config('app.url', '');
        
        $actionButton = '';
        if ($actionUrl) {
            $fullUrl = $actionUrl;
            if (!str_starts_with($actionUrl, 'http')) {
                $fullUrl = rtrim($appUrl, '/') . '/' . ltrim($actionUrl, '/');
            }
            $actionButton = "
                <div style='text-align: center; margin: 25px 0;'>
                    <a href='{$fullUrl}' style='display: inline-block; background: linear-gradient(135deg, #3b82f6, #8b5cf6); color: white; padding: 12px 30px; text-decoration: none; border-radius: 8px; font-weight: bold;'>
                        Voir les détails
                    </a>
                </div>
            ";
        }

        Mail::send([], [], function ($mail) use ($user, $title, $message, $appName, $actionButton) {
            $mail->to($user->email)
                 ->subject("[{$appName}] {$title}")
                 ->html("
                    <div style='font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden;'>
                        <div style='background: linear-gradient(135deg, #3b82f6, #8b5cf6); padding: 25px; text-align: center;'>
                            <h1 style='color: white; margin: 0; font-size: 24px;'>{$appName}</h1>
                        </div>
                        <div style='padding: 30px; background: #ffffff;'>
                            <h2 style='color: #1f2937; margin-top: 0; font-size: 20px;'>{$title}</h2>
                            <p style='color: #4b5563; line-height: 1.8; font-size: 15px;'>{$message}</p>
                            {$actionButton}
                        </div>
                        <div style='padding: 20px; background: #f3f4f6; text-align: center; border-top: 1px solid #e5e7eb;'>
                            <p style='color: #6b7280; font-size: 12px; margin: 0;'>
                                © " . date('Y') . " {$appName}. Tous droits réservés.<br>
                                <small>Vous recevez cet email car vous êtes inscrit sur notre plateforme.</small>
                            </p>
                        </div>
                    </div>
                 ");
        });
    }

    /**
     * Envoi Telegram statique (pour utilisation dans notify())
     */
    protected static function sendTelegramStatic(int $userId, string $title, string $message): void
    {
        if (!Setting::get('telegram_notifications_enabled', false)) {
            return;
        }

        $user = User::find($userId);
        if (!$user || !$user->telegram_chat_id) {
            return;
        }

        $botToken = Setting::get('telegram_bot_token');
        if (!$botToken) {
            return;
        }

        Http::post("https://api.telegram.org/bot{$botToken}/sendMessage", [
            'chat_id' => $user->telegram_chat_id,
            'text' => "<b>{$title}</b>\n\n{$message}",
            'parse_mode' => 'HTML'
        ]);
    }

    // ==================== EMAILS DÉTAILLÉS DE BIENVENUE ====================

    /**
     * Email de bienvenue membre après vérification email
     * Envoie un guide complet avec valeurs dynamiques
     */
    public static function sendWelcomeMemberEmail(User $user): void
    {
        if (!Setting::get('email_notifications_enabled', true)) {
            return;
        }

        if (!$user->email || !($user->email_notifications ?? true)) {
            return;
        }

        try {
            // Récupérer les valeurs dynamiques depuis Settings
            $appName = config('app.name', 'Bijoux Express');
            $appUrl = config('app.url', '');
            
            $subscriptionPrice = number_format(Setting::get('subscription_price', 20000), 0, ',', ' ');
            $ammAmount = number_format(Setting::get('minimum_monthly_purchase', 50000), 0, ',', ' ');
            $level1Commission = Setting::get('level_1_commission', 10);
            $level2Commission = Setting::get('level_2_commission', 5);
            $memberDiscount = Setting::get('member_discount_percentage', 15);
            $minWithdrawal = number_format(Setting::get('min_withdrawal_amount', 5000), 0, ',', ' ');
            $maxWithdrawal = number_format(Setting::get('max_withdrawal_amount', 1000000), 0, ',', ' ');
            $withdrawalFee = Setting::get('withdrawal_fee_percentage', 2);
            $quickStartBonus = number_format(Setting::get('quick_start_bonus', 5000), 0, ',', ' ');

            $dashboardUrl = rtrim($appUrl, '/') . '/member/dashboard';

            $htmlContent = "
            <div style='font-family: Arial, sans-serif; max-width: 650px; margin: 0 auto; border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden;'>
                <!-- Header -->
                <div style='background: linear-gradient(135deg, #3b82f6, #8b5cf6); padding: 30px; text-align: center;'>
                    <h1 style='color: white; margin: 0; font-size: 28px;'>🎉 Bienvenue sur {$appName} !</h1>
                </div>
                
                <!-- Content -->
                <div style='padding: 30px; background: #ffffff;'>
                    <p style='font-size: 16px; color: #374151;'>Bonjour <strong>{$user->first_name}</strong>,</p>
                    <p style='font-size: 15px; color: #4b5563; line-height: 1.6;'>
                        Félicitations ! 🎊 Votre adresse email a été vérifiée avec succès. Bienvenue dans notre communauté !
                    </p>

                    <!-- Étape 1 -->
                    <div style='background: #f0f9ff; border-left: 4px solid #3b82f6; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #1e40af; margin-top: 0;'>🚀 ÉTAPE 1 : Activez votre compte</h3>
                        <p style='color: #374151; margin: 0;'>
                            Pour accéder à toutes les fonctionnalités, souscrivez à votre abonnement :
                        </p>
                        <p style='color: #1e40af; font-size: 18px; font-weight: bold; margin: 10px 0;'>
                            📦 Pack Standard : {$subscriptionPrice} XOF / 30 jours
                        </p>
                        <p style='color: #059669; margin: 0;'>
                            🎁 <strong>Bonus Quick Start</strong> : Gagnez {$quickStartBonus} XOF quand un filleul s'abonne !
                        </p>
                    </div>

                    <!-- Étape 2 -->
                    <div style='background: #fef3c7; border-left: 4px solid #f59e0b; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #92400e; margin-top: 0;'>🛒 ÉTAPE 2 : Faites votre premier achat</h3>
                        <p style='color: #374151; margin: 0;'>
                            Achetez des <strong>produits d'investissement</strong> pour générer des revenus passifs.
                        </p>
                        <p style='color: #059669; margin: 10px 0 0 0;'>
                            ✨ <strong>Avantage membre</strong> : {$memberDiscount}% de réduction sur tous vos achats !
                        </p>
                    </div>

                    <!-- Commissions -->
                    <div style='background: #d1fae5; border-left: 4px solid #10b981; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #065f46; margin-top: 0;'>💰 ÉTAPE 3 : Parrainez et gagnez</h3>
                        <table style='width: 100%; border-collapse: collapse; margin: 10px 0;'>
                            <tr style='background: #a7f3d0;'>
                                <td style='padding: 10px; border: 1px solid #6ee7b7;'><strong>Niveau 1</strong> (filleuls directs)</td>
                                <td style='padding: 10px; border: 1px solid #6ee7b7; text-align: center;'><strong>{$level1Commission}%</strong></td>
                            </tr>
                            <tr>
                                <td style='padding: 10px; border: 1px solid #6ee7b7;'><strong>Niveau 2</strong> (filleuls indirects)</td>
                                <td style='padding: 10px; border: 1px solid #6ee7b7; text-align: center;'><strong>{$level2Commission}%</strong></td>
                            </tr>
                        </table>
                        <p style='color: #374151; margin: 5px 0 0 0; font-style: italic;'>
                            Exemple : Votre filleul achète 100 000 XOF → Vous gagnez {$level1Commission} 000 XOF !
                        </p>
                    </div>

                    <!-- AMM Warning -->
                    <div style='background: #fef2f2; border-left: 4px solid #ef4444; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #991b1b; margin-top: 0;'>⚠️ IMPORTANT : L'AMM (Achat Mensuel Minimum)</h3>
                        <p style='color: #374151; margin: 0;'>
                            Pour <strong>rester actif</strong> et recevoir vos commissions, vous devez effectuer un achat minimum de :
                        </p>
                        <p style='color: #dc2626; font-size: 20px; font-weight: bold; margin: 10px 0;'>
                            {$ammAmount} XOF / mois
                        </p>
                        <p style='color: #374151; margin: 0;'>
                            ❌ Sans AMM = Commissions <strong>bloquées</strong><br>
                            ✅ Un seul achat suffit pour rester actif tout le mois !
                        </p>
                    </div>

                    <!-- Retraits -->
                    <div style='background: #f3f4f6; padding: 15px; margin: 20px 0; border-radius: 8px;'>
                        <h3 style='color: #374151; margin-top: 0;'>💸 Retirez vos gains facilement</h3>
                        <ul style='color: #4b5563; padding-left: 20px; margin: 0;'>
                            <li>Minimum : <strong>{$minWithdrawal} XOF</strong></li>
                            <li>Maximum : <strong>{$maxWithdrawal} XOF</strong></li>
                            <li>Méthodes : Orange Money, MTN, Moov, Wave</li>
                            <li>Frais : <strong>{$withdrawalFee}%</strong></li>
                        </ul>
                    </div>

                    <!-- CTA Button -->
                    <div style='text-align: center; margin: 30px 0;'>
                        <a href='{$dashboardUrl}' style='display: inline-block; background: linear-gradient(135deg, #3b82f6, #8b5cf6); color: white; padding: 15px 40px; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 16px;'>
                            👉 Accéder à mon tableau de bord
                        </a>
                    </div>
                </div>

                <!-- Footer -->
                <div style='padding: 20px; background: #f3f4f6; text-align: center; border-top: 1px solid #e5e7eb;'>
                    <p style='color: #6b7280; font-size: 12px; margin: 0;'>
                        © " . date('Y') . " {$appName}. Tous droits réservés.<br>
                        <small>Vous recevez cet email suite à la vérification de votre compte.</small>
                    </p>
                </div>
            </div>
            ";

            Mail::send([], [], function ($mail) use ($user, $appName, $htmlContent) {
                $mail->to($user->email)
                     ->subject("🎉 Bienvenue sur {$appName} - Votre guide pour démarrer !")
                     ->html($htmlContent);
            });

            Log::info('Email de bienvenue membre envoyé', ['user_id' => $user->id, 'email' => $user->email]);

        } catch (\Exception $e) {
            Log::error('Erreur envoi email bienvenue membre: ' . $e->getMessage(), ['user_id' => $user->id]);
        }
    }

    /**
     * Email détaillé seller approuvé
     * Envoie un guide complet avec les frais, processus commandes, etc.
     */
    public static function sendSellerApprovedEmail(User $user): void
    {
        if (!Setting::get('email_notifications_enabled', true)) {
            return;
        }

        if (!$user->email || !($user->email_notifications ?? true)) {
            return;
        }

        $seller = $user->seller;
        if (!$seller) {
            return;
        }

        try {
            $appName = config('app.name', 'Bijoux Express');
            $appUrl = config('app.url', '');

            // Valeurs dynamiques
            $sellerCommission = Setting::get('default_seller_commission', 10);
            $withdrawalFee = Setting::get('withdrawal_fee_percentage', 2);
            $minWithdrawal = number_format(Setting::get('min_withdrawal_amount', 5000), 0, ',', ' ');
            $maxWithdrawal = number_format(Setting::get('max_withdrawal_amount', 1000000), 0, ',', ' ');
            $autoConfirmDays = Setting::get('order_auto_confirm_days', 7);

            $sellerNetPercent = 100 - $sellerCommission;
            $dashboardUrl = rtrim($appUrl, '/') . '/seller/dashboard';

            $htmlContent = "
            <div style='font-family: Arial, sans-serif; max-width: 650px; margin: 0 auto; border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden;'>
                <!-- Header -->
                <div style='background: linear-gradient(135deg, #10b981, #059669); padding: 30px; text-align: center;'>
                    <h1 style='color: white; margin: 0; font-size: 28px;'>✅ Félicitations {$seller->shop_name} !</h1>
                    <p style='color: #d1fae5; margin: 10px 0 0 0; font-size: 16px;'>Votre boutique est maintenant active</p>
                </div>
                
                <!-- Content -->
                <div style='padding: 30px; background: #ffffff;'>
                    <p style='font-size: 16px; color: #374151;'>Bonjour <strong>{$user->first_name}</strong>,</p>
                    <p style='font-size: 15px; color: #4b5563; line-height: 1.6;'>
                        Excellente nouvelle ! 🎉 Votre demande de vendeur a été <strong>approuvée</strong>. Vous pouvez maintenant vendre vos produits sur <strong>{$appName}</strong> !
                    </p>

                    <!-- Frais -->
                    <div style='background: #fef3c7; border-left: 4px solid #f59e0b; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #92400e; margin-top: 0;'>💰 Nos frais et commissions</h3>
                        <table style='width: 100%; border-collapse: collapse; margin: 10px 0;'>
                            <tr style='background: #fde68a;'>
                                <td style='padding: 10px; border: 1px solid #fbbf24;'>Commission plateforme</td>
                                <td style='padding: 10px; border: 1px solid #fbbf24; text-align: center;'><strong>{$sellerCommission}%</strong> sur chaque vente</td>
                            </tr>
                            <tr>
                                <td style='padding: 10px; border: 1px solid #fbbf24;'>Frais de retrait</td>
                                <td style='padding: 10px; border: 1px solid #fbbf24; text-align: center;'><strong>{$withdrawalFee}%</strong> du montant</td>
                            </tr>
                        </table>
                        <p style='color: #374151; margin: 5px 0 0 0; font-style: italic;'>
                            Exemple : Vente de 50 000 XOF → Vous recevez <strong>" . number_format(50000 * $sellerNetPercent / 100, 0, ',', ' ') . " XOF</strong>
                        </p>
                    </div>

                    <!-- Processus commandes -->
                    <div style='background: #f0f9ff; border-left: 4px solid #3b82f6; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #1e40af; margin-top: 0;'>📦 Comment traiter vos commandes ?</h3>
                        <table style='width: 100%; border-collapse: collapse; margin: 10px 0; font-size: 14px;'>
                            <tr style='background: #dbeafe;'>
                                <td style='padding: 8px; border: 1px solid #93c5fd; width: 30px;'>1️⃣</td>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'><strong>Nouvelle commande</strong> → Vous êtes notifié</td>
                            </tr>
                            <tr>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'>2️⃣</td>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'><strong>Confirmez</strong> la commande (sous 24h)</td>
                            </tr>
                            <tr style='background: #dbeafe;'>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'>3️⃣</td>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'><strong>Expédiez</strong> le colis au client (sous 48h)</td>
                            </tr>
                            <tr>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'>4️⃣</td>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'><strong>Uploadez</strong> la preuve de livraison</td>
                            </tr>
                            <tr style='background: #dbeafe;'>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'>5️⃣</td>
                                <td style='padding: 8px; border: 1px solid #93c5fd;'><strong>Validation</strong> → Argent crédité (24-48h)</td>
                            </tr>
                        </table>
                    </div>

                    <!-- Preuve de livraison -->
                    <div style='background: #fef2f2; border-left: 4px solid #ef4444; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #991b1b; margin-top: 0;'>📸 Preuve de livraison (TRÈS IMPORTANT)</h3>
                        <p style='color: #dc2626; font-weight: bold; margin: 0 0 10px 0;'>
                            ⚠️ Sans preuve de livraison, vous ne serez PAS payé !
                        </p>
                        <p style='color: #374151; margin: 0;'><strong>✅ Preuves acceptées :</strong></p>
                        <ul style='color: #4b5563; padding-left: 20px; margin: 5px 0;'>
                            <li>Photo du colis remis au client</li>
                            <li>Reçu du transporteur signé</li>
                            <li>Capture de confirmation du client</li>
                            <li>Bon de livraison signé</li>
                        </ul>
                        <p style='color: #374151; margin: 10px 0 0 0; font-style: italic;'>
                            Si aucune preuve : confirmation automatique après <strong>{$autoConfirmDays} jours</strong> si pas de réclamation.
                        </p>
                    </div>

                    <!-- Retraits -->
                    <div style='background: #d1fae5; border-left: 4px solid #10b981; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #065f46; margin-top: 0;'>💸 Comment recevoir vos gains ?</h3>
                        <ul style='color: #4b5563; padding-left: 20px; margin: 0;'>
                            <li>Minimum de retrait : <strong>{$minWithdrawal} XOF</strong></li>
                            <li>Maximum de retrait : <strong>{$maxWithdrawal} XOF</strong></li>
                            <li>Frais : <strong>{$withdrawalFee}%</strong></li>
                            <li>Méthodes : Orange Money, MTN, Moov, Wave</li>
                            <li>Délai : 24-48h ouvrées</li>
                        </ul>
                    </div>

                    <!-- Checklist -->
                    <div style='background: #f3f4f6; padding: 15px; margin: 20px 0; border-radius: 8px;'>
                        <h3 style='color: #374151; margin-top: 0;'>✅ Checklist pour bien démarrer</h3>
                        <ul style='color: #4b5563; padding-left: 20px; margin: 0;'>
                            <li>☐ Ajoutez vos premiers produits avec <strong>photos de qualité</strong></li>
                            <li>☐ Renseignez vos <strong>informations de paiement</strong> (Mobile Money)</li>
                            <li>☐ Activez vos <strong>notifications</strong> pour ne rater aucune commande</li>
                            <li>☐ Préparez vos <strong>emballages</strong> pour une expédition rapide</li>
                        </ul>
                    </div>

                    <!-- CTA Button -->
                    <div style='text-align: center; margin: 30px 0;'>
                        <a href='{$dashboardUrl}' style='display: inline-block; background: linear-gradient(135deg, #10b981, #059669); color: white; padding: 15px 40px; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 16px;'>
                            👉 Accéder à ma boutique
                        </a>
                    </div>

                    <p style='color: #4b5563; text-align: center; margin: 0;'>Bonne vente ! 🛍️</p>
                </div>

                <!-- Footer -->
                <div style='padding: 20px; background: #f3f4f6; text-align: center; border-top: 1px solid #e5e7eb;'>
                    <p style='color: #6b7280; font-size: 12px; margin: 0;'>
                        © " . date('Y') . " {$appName}. Tous droits réservés.
                    </p>
                </div>
            </div>
            ";

            Mail::send([], [], function ($mail) use ($user, $appName, $seller, $htmlContent) {
                $mail->to($user->email)
                     ->subject("✅ Félicitations ! Votre boutique {$seller->shop_name} est active sur {$appName}")
                     ->html($htmlContent);
            });

            Log::info('Email seller approuvé envoyé', ['user_id' => $user->id, 'seller_id' => $seller->id]);

        } catch (\Exception $e) {
            Log::error('Erreur envoi email seller approuvé: ' . $e->getMessage(), ['user_id' => $user->id]);
        }
    }

    /**
     * Email détaillé seller rejeté avec motif
     */
    public static function sendSellerRejectedEmail(User $user, string $reason): void
    {
        if (!Setting::get('email_notifications_enabled', true)) {
            return;
        }

        if (!$user->email || !($user->email_notifications ?? true)) {
            return;
        }

        $seller = $user->seller;

        try {
            $appName = config('app.name', 'Bijoux Express');
            $appUrl = config('app.url', '');

            $kycUrl = rtrim($appUrl, '/') . '/seller/kyc';

            $htmlContent = "
            <div style='font-family: Arial, sans-serif; max-width: 650px; margin: 0 auto; border: 1px solid #e5e7eb; border-radius: 12px; overflow: hidden;'>
                <!-- Header -->
                <div style='background: linear-gradient(135deg, #ef4444, #dc2626); padding: 30px; text-align: center;'>
                    <h1 style='color: white; margin: 0; font-size: 28px;'>❌ Demande de vendeur non approuvée</h1>
                </div>
                
                <!-- Content -->
                <div style='padding: 30px; background: #ffffff;'>
                    <p style='font-size: 16px; color: #374151;'>Bonjour <strong>{$user->first_name}</strong>,</p>
                    <p style='font-size: 15px; color: #4b5563; line-height: 1.6;'>
                        Nous avons examiné votre demande pour devenir vendeur sur <strong>{$appName}</strong>.
                    </p>
                    <p style='font-size: 15px; color: #4b5563;'>
                        Malheureusement, votre demande a été <strong style='color: #dc2626;'>refusée</strong>.
                    </p>

                    <!-- Motif du rejet -->
                    <div style='background: #fef2f2; border: 2px solid #fecaca; padding: 20px; margin: 20px 0; border-radius: 8px;'>
                        <h3 style='color: #991b1b; margin-top: 0;'>📝 Motif du rejet :</h3>
                        <p style='color: #7f1d1d; font-size: 15px; margin: 0; padding: 15px; background: white; border-radius: 5px; border-left: 4px solid #ef4444;'>
                            {$reason}
                        </p>
                    </div>

                    <!-- Comment corriger -->
                    <div style='background: #f0f9ff; border-left: 4px solid #3b82f6; padding: 15px; margin: 20px 0; border-radius: 0 8px 8px 0;'>
                        <h3 style='color: #1e40af; margin-top: 0;'>🔄 Comment corriger et resoumettre ?</h3>
                        <ol style='color: #374151; padding-left: 20px; margin: 0;'>
                            <li>Connectez-vous à votre compte</li>
                            <li>Allez dans <strong>\"Devenir vendeur\"</strong></li>
                            <li>Corrigez les points mentionnés ci-dessus</li>
                            <li>Soumettez à nouveau votre demande</li>
                        </ol>
                    </div>

                    <!-- Checklist -->
                    <div style='background: #f3f4f6; padding: 15px; margin: 20px 0; border-radius: 8px;'>
                        <h3 style='color: #374151; margin-top: 0;'>✅ Checklist pour une demande réussie</h3>
                        <ul style='color: #4b5563; padding-left: 20px; margin: 0;'>
                            <li>☐ <strong>Pièce d'identité</strong> : Photo claire, lisible, non expirée</li>
                            <li>☐ <strong>Photo de profil</strong> : Professionnelle, visage visible</li>
                            <li>☐ <strong>Informations boutique</strong> : Nom, description, catégorie remplis</li>
                            <li>☐ <strong>Adresse complète</strong> : Ville, quartier, repères</li>
                            <li>☐ <strong>Numéro Mobile Money</strong> : Valide et actif</li>
                        </ul>
                    </div>

                    <!-- CTA Button -->
                    <div style='text-align: center; margin: 30px 0;'>
                        <a href='{$kycUrl}' style='display: inline-block; background: linear-gradient(135deg, #3b82f6, #1d4ed8); color: white; padding: 15px 40px; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 16px;'>
                            👉 Modifier ma demande
                        </a>
                    </div>

                    <p style='color: #6b7280; text-align: center; font-size: 14px; margin: 0;'>
                        Besoin d'aide ? Répondez à cet email ou contactez notre support.
                    </p>
                </div>

                <!-- Footer -->
                <div style='padding: 20px; background: #f3f4f6; text-align: center; border-top: 1px solid #e5e7eb;'>
                    <p style='color: #6b7280; font-size: 12px; margin: 0;'>
                        © " . date('Y') . " {$appName}. Tous droits réservés.
                    </p>
                </div>
            </div>
            ";

            Mail::send([], [], function ($mail) use ($user, $appName, $htmlContent) {
                $mail->to($user->email)
                     ->subject("❌ Votre demande de vendeur nécessite des corrections - {$appName}")
                     ->html($htmlContent);
            });

            Log::info('Email seller rejeté envoyé', ['user_id' => $user->id, 'reason' => $reason]);

        } catch (\Exception $e) {
            Log::error('Erreur envoi email seller rejeté: ' . $e->getMessage(), ['user_id' => $user->id]);
        }
    }

    // ==================== NOTIFICATIONS MEMBRE ====================

    /**
     * Notification de nouvelle commission reçue
     */
    public static function commissionReceived(int $userId, float $amount, string $source, ?int $commissionId = null): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $userId,
            self::TYPE_COMMISSION,
            'Nouvelle Commission Reçue',
            "Vous avez reçu une commission de {$formattedAmount} FCFA provenant de : {$source}.",
            ['amount' => $amount, 'source' => $source, 'commission_id' => $commissionId],
            '/member/commissions'
        );
    }

    /**
     * Notification d'achat de produit d'investissement
     */
    public static function investmentPurchased(int $userId, string $productName, float $amount): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            'Achat d\'Investissement Confirmé',
            "Votre achat du produit d'investissement \"{$productName}\" pour {$formattedAmount} FCFA a été effectué avec succès.",
            ['product_name' => $productName, 'amount' => $amount],
            '/member/investments'
        );
    }

    /**
     * Notification d'achat de produit boutique
     */
    public static function productPurchased(int $userId, string $orderNumber, float $totalAmount, int $itemsCount): Notification
    {
        $formattedAmount = number_format($totalAmount, 0, ',', ' ');
        return self::notify(
            $userId,
            self::TYPE_ORDER,
            'Commande Confirmée',
            "Votre commande #{$orderNumber} de {$formattedAmount} FCFA ({$itemsCount} article(s)) a été passée avec succès.",
            ['order_number' => $orderNumber, 'total' => $totalAmount, 'items_count' => $itemsCount],
            '/member/orders'
        );
    }

    /**
     * Notification de changement de statut de commande
     */
    public static function orderStatusChanged(int $userId, string $orderNumber, string $oldStatus, string $newStatus): Notification
    {
        $statusLabels = [
            'pending' => 'En attente',
            'processing' => 'En cours de traitement',
            'shipped' => 'Expédiée',
            'delivered' => 'Livrée',
            'cancelled' => 'Annulée'
        ];
        
        $newStatusLabel = $statusLabels[$newStatus] ?? ucfirst($newStatus);
        
        $type = match($newStatus) {
            'delivered' => self::TYPE_SUCCESS,
            'cancelled' => self::TYPE_ALERT,
            'shipped' => self::TYPE_INFO,
            default => self::TYPE_ORDER
        };

        return self::notify(
            $userId,
            $type,
            'Statut de Commande Mis à Jour',
            "Le statut de votre commande #{$orderNumber} est passé à : {$newStatusLabel}.",
            ['order_number' => $orderNumber, 'old_status' => $oldStatus, 'new_status' => $newStatus],
            '/member/orders'
        );
    }

    /**
     * Notification de transfert wallet
     */
    public static function walletTransfer(int $userId, string $type, float $amount, string $description): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        $isCredit = in_array($type, ['deposit', 'credit', 'commission', 'refund']);
        
        $title = $isCredit ? 'Crédit sur votre Wallet' : 'Débit de votre Wallet';
        $message = $isCredit 
            ? "Votre wallet a été crédité de {$formattedAmount} FCFA. Motif : {$description}."
            : "Un débit de {$formattedAmount} FCFA a été effectué sur votre wallet. Motif : {$description}.";

        return self::notify(
            $userId,
            $isCredit ? self::TYPE_SUCCESS : self::TYPE_INFO,
            $title,
            $message,
            ['amount' => $amount, 'type' => $type, 'description' => $description],
            '/member/wallet'
        );
    }

    /**
     * Notification de blocage d'épargne
     */
    public static function savingsLocked(int $userId, float $amount, ?string $unlockDate = null): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        $message = "Vous avez bloqué {$formattedAmount} FCFA sur votre épargne.";
        if ($unlockDate) {
            $message .= " Déblocage prévu le {$unlockDate}.";
        }

        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            'Épargne Bloquée',
            $message,
            ['amount' => $amount, 'unlock_date' => $unlockDate],
            '/member/savings'
        );
    }

    /**
     * Notification de déblocage d'épargne
     */
    public static function savingsUnlocked(int $userId, float $amount): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            'Épargne Débloquée',
            "Votre épargne de {$formattedAmount} FCFA a été débloquée et transférée vers votre wallet.",
            ['amount' => $amount],
            '/member/wallet'
        );
    }

    /**
     * Notification de blocage d'argent sur période
     */
    public static function fundsLocked(int $userId, float $amount, string $period, string $endDate): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $userId,
            self::TYPE_INFO,
            'Fonds Bloqués',
            "Vous avez bloqué {$formattedAmount} FCFA pour une durée de {$period}. Fin du blocage le {$endDate}.",
            ['amount' => $amount, 'period' => $period, 'end_date' => $endDate],
            '/member/savings'
        );
    }

    /**
     * Notification d'ajout d'adresse
     */
    public static function addressAdded(int $userId, string $addressLabel): Notification
    {
        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            'Nouvelle Adresse Ajoutée',
            "L'adresse \"{$addressLabel}\" a été ajoutée à votre carnet d'adresses.",
            ['address_label' => $addressLabel],
            '/member/addresses'
        );
    }

    /**
     * Notification de suppression d'adresse
     */
    public static function addressDeleted(int $userId, string $addressLabel): Notification
    {
        return self::notify(
            $userId,
            self::TYPE_INFO,
            'Adresse Supprimée',
            "L'adresse \"{$addressLabel}\" a été supprimée de votre carnet d'adresses.",
            ['address_label' => $addressLabel],
            '/member/addresses'
        );
    }

    /**
     * Notification de création de ticket de litige
     */
    public static function disputeCreated(int $userId, string $ticketNumber, string $subject): Notification
    {
        return self::notify(
            $userId,
            self::TYPE_INFO,
            'Ticket de Litige Créé',
            "Votre ticket #{$ticketNumber} concernant \"{$subject}\" a été créé. Notre équipe vous répondra sous peu.",
            ['ticket_number' => $ticketNumber, 'subject' => $subject],
            '/member/disputes'
        );
    }

    /**
     * Notification de réponse sur ticket de litige
     */
    public static function disputeReply(int $userId, string $ticketNumber, string $responderName): Notification
    {
        return self::notify(
            $userId,
            self::TYPE_ALERT,
            'Nouvelle Réponse sur votre Ticket',
            "Vous avez reçu une réponse de {$responderName} sur votre ticket #{$ticketNumber}.",
            ['ticket_number' => $ticketNumber, 'responder' => $responderName],
            '/member/disputes'
        );
    }

    /**
     * Notification de nouveau badge
     */
    public static function newBadge(int $userId, string $badgeName, string $badgeDescription = ''): Notification
    {
        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            '🏆 Nouveau Badge Débloqué !',
            "Félicitations ! Vous avez obtenu le badge \"{$badgeName}\". {$badgeDescription}",
            ['badge_name' => $badgeName],
            '/member/profile'
        );
    }

    /**
     * Notification de nouveau classement/rang
     */
    public static function newRank(int $userId, string $rankName, ?string $bonus = null): Notification
    {
        $message = "Félicitations ! Vous avez atteint le rang \"{$rankName}\".";
        if ($bonus) {
            $message .= " Bonus de rang : {$bonus}.";
        }

        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            '🎖️ Nouveau Rang Atteint !',
            $message,
            ['rank_name' => $rankName, 'bonus' => $bonus],
            '/member/network'
        );
    }

    /**
     * Notification de points de fidélité
     */
    public static function loyaltyPoints(int $userId, int $points, string $reason, int $totalPoints = 0): Notification
    {
        $message = "Vous avez gagné {$points} points de fidélité pour : {$reason}.";
        if ($totalPoints > 0) {
            $message .= " Total : {$totalPoints} points.";
        }
        
        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            'Points de Fidélité Gagnés',
            $message,
            ['points' => $points, 'reason' => $reason, 'total' => $totalPoints],
            '/member/loyalty'
        );
    }

    /**
     * Notification de nouveau filleul
     */
    public static function newReferral(int $userId, string $referralName, int $level = 1): Notification
    {
        $levelText = $level === 1 ? 'direct' : "niveau {$level}";
        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            '👥 Nouveau Filleul !',
            "Félicitations ! {$referralName} a rejoint votre réseau en tant que filleul {$levelText}.",
            ['referral_name' => $referralName, 'level' => $level],
            '/member/network'
        );
    }

    /**
     * Notification d'avis soumis sur un produit
     */
    public static function reviewSubmitted(int $userId, string $productName): Notification
    {
        return self::notify(
            $userId,
            self::TYPE_SUCCESS,
            'Avis Soumis avec Succès',
            "Merci ! Votre avis sur \"{$productName}\" a été soumis et sera publié après validation.",
            ['product_name' => $productName],
            '/member/orders'
        );
    }

    /**
     * Notification de nouvel article de blog
     */
    public static function newBlogPost(int $userId, string $postTitle, string $postSlug): Notification
    {
        return self::notify(
            $userId,
            self::TYPE_INFO,
            '📰 Nouvel Article de Blog',
            "Un nouvel article a été publié : \"{$postTitle}\". Découvrez-le maintenant !",
            ['post_title' => $postTitle, 'post_slug' => $postSlug],
            "/blog/{$postSlug}"
        );
    }

    /**
     * Notification pour retrait effectué
     */
    public static function withdrawalProcessed(int $userId, float $amount, string $status, ?string $reference = null): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        
        $statusMessages = [
            'approved' => "Votre demande de retrait de {$formattedAmount} FCFA a été approuvée et traitée.",
            'rejected' => "Votre demande de retrait de {$formattedAmount} FCFA a été refusée.",
            'pending' => "Votre demande de retrait de {$formattedAmount} FCFA est en cours de traitement.",
        ];
        
        $type = match($status) {
            'approved' => self::TYPE_SUCCESS,
            'rejected' => self::TYPE_ALERT,
            default => self::TYPE_INFO
        };

        return self::notify(
            $userId,
            $type,
            'Mise à jour Retrait',
            $statusMessages[$status] ?? "Statut de votre retrait : {$status}",
            ['amount' => $amount, 'status' => $status, 'reference' => $reference],
            '/member/withdrawals'
        );
    }

    /**
     * Notification de demande de retrait créée
     */
    public static function withdrawalCreated(int $userId, float $amount): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $userId,
            self::TYPE_INFO,
            'Demande de Retrait Soumise',
            "Votre demande de retrait de {$formattedAmount} FCFA a été soumise et est en attente de traitement.",
            ['amount' => $amount],
            '/member/withdrawals'
        );
    }

    // ==================== NOTIFICATIONS SELLER ====================

    /**
     * Notification de nouvelle commande pour le vendeur
     */
    public static function sellerNewOrder(int $sellerId, string $orderNumber, float $amount, int $itemsCount): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $sellerId,
            self::TYPE_ORDER,
            '🛒 Nouvelle Commande Reçue !',
            "Vous avez reçu une nouvelle commande #{$orderNumber} de {$formattedAmount} FCFA ({$itemsCount} article(s)).",
            ['order_number' => $orderNumber, 'amount' => $amount, 'items_count' => $itemsCount],
            '/seller/orders'
        );
    }

    /**
     * Notification de produit en rupture de stock pour le vendeur
     */
    public static function sellerLowStock(int $sellerId, string $productName, int $currentStock): Notification
    {
        return self::notify(
            $sellerId,
            self::TYPE_WARNING,
            '⚠️ Stock Faible',
            "Le produit \"{$productName}\" n'a plus que {$currentStock} unité(s) en stock. Pensez à réapprovisionner.",
            ['product_name' => $productName, 'stock' => $currentStock],
            '/seller/products'
        );
    }

    /**
     * Notification de paiement reçu pour le vendeur
     */
    public static function sellerPaymentReceived(int $sellerId, float $amount, string $period): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $sellerId,
            self::TYPE_SUCCESS,
            '💰 Paiement Reçu',
            "Vous avez reçu un paiement de {$formattedAmount} FCFA pour vos ventes de {$period}.",
            ['amount' => $amount, 'period' => $period],
            '/seller/wallet'
        );
    }

    /**
     * Notification de KYC pour le vendeur
     * Envoie aussi l'email détaillé selon le statut
     */
    public static function sellerKycStatus(int $sellerId, string $status, ?string $reason = null): Notification
    {
        $messages = [
            'approved' => 'Votre vérification KYC a été approuvée. Vous pouvez maintenant vendre sur la plateforme.',
            'rejected' => 'Votre vérification KYC a été refusée.' . ($reason ? " Raison : {$reason}" : ' Veuillez soumettre de nouveaux documents.'),
            'pending' => 'Vos documents KYC sont en cours de vérification.',
        ];
        
        $type = match($status) {
            'approved' => self::TYPE_SUCCESS,
            'rejected' => self::TYPE_ALERT,
            default => self::TYPE_INFO
        };

        // Créer la notification standard (sans email car on envoie l'email détaillé)
        $notification = self::notify(
            $sellerId,
            $type,
            'Statut KYC',
            $messages[$status] ?? "Statut KYC : {$status}",
            ['status' => $status, 'reason' => $reason],
            '/seller/kyc',
            false, // Ne pas envoyer l'email simple
            true   // Envoyer Telegram
        );

        // Envoyer l'email détaillé selon le statut
        $user = User::find($sellerId);
        if ($user) {
            if ($status === 'approved') {
                self::sendSellerApprovedEmail($user);
            } elseif ($status === 'rejected' && $reason) {
                self::sendSellerRejectedEmail($user, $reason);
            }
        }

        return $notification;
    }

    /**
     * Notification de nouvel avis sur produit du vendeur
     */
    public static function sellerNewReview(int $sellerId, string $productName, int $rating, string $customerName): Notification
    {
        $stars = str_repeat('⭐', $rating);
        return self::notify(
            $sellerId,
            self::TYPE_INFO,
            'Nouvel Avis Client',
            "{$customerName} a laissé un avis {$stars} sur votre produit \"{$productName}\".",
            ['product_name' => $productName, 'rating' => $rating, 'customer' => $customerName],
            '/seller/reviews'
        );
    }

    /**
     * Notification de produit approuvé/rejeté
     */
    public static function sellerProductStatus(int $sellerId, string $productName, string $status, ?string $reason = null): Notification
    {
        $type = $status === 'approved' ? self::TYPE_SUCCESS : self::TYPE_ALERT;
        $title = $status === 'approved' ? 'Produit Approuvé' : 'Produit Rejeté';
        $message = $status === 'approved' 
            ? "Votre produit \"{$productName}\" a été approuvé et est maintenant visible dans la boutique."
            : "Votre produit \"{$productName}\" a été rejeté." . ($reason ? " Raison : {$reason}" : '');

        return self::notify($sellerId, $type, $title, $message, ['product_name' => $productName, 'status' => $status], '/seller/products');
    }

    /**
     * Notification de demande de retrait vendeur
     */
    public static function sellerWithdrawalStatus(int $sellerId, float $amount, string $status): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        $type = match($status) {
            'approved' => self::TYPE_SUCCESS,
            'rejected' => self::TYPE_ALERT,
            default => self::TYPE_INFO
        };

        $messages = [
            'approved' => "Votre retrait de {$formattedAmount} FCFA a été approuvé.",
            'rejected' => "Votre retrait de {$formattedAmount} FCFA a été refusé.",
            'pending' => "Votre demande de retrait de {$formattedAmount} FCFA est en cours.",
        ];

        return self::notify($sellerId, $type, 'Statut Retrait', $messages[$status] ?? "Retrait : {$status}", ['amount' => $amount, 'status' => $status], '/seller/withdrawals');
    }

    /**
     * Notification de litige vendeur
     */
    public static function sellerDispute(int $sellerId, string $orderNumber, string $reason): Notification
    {
        return self::notify(
            $sellerId,
            self::TYPE_ALERT,
            '⚠️ Litige Ouvert',
            "Un litige a été ouvert pour la commande #{$orderNumber}. Raison : {$reason}",
            ['order_number' => $orderNumber, 'reason' => $reason],
            '/seller/disputes'
        );
    }

    /**
     * Notification de réponse à litige seller
     */
    public static function sellerDisputeReply(int $sellerId, string $disputeRef, string $fromWho): Notification
    {
        return self::notify(
            $sellerId,
            self::TYPE_INFO,
            'Nouvelle Réponse au Litige',
            "Une nouvelle réponse a été ajoutée au litige #{$disputeRef} par {$fromWho}.",
            ['dispute_ref' => $disputeRef],
            '/seller/disputes'
        );
    }

    /**
     * Notification de création de produit seller
     */
    public static function sellerProductCreated(int $sellerId, string $productName): Notification
    {
        return self::notify(
            $sellerId,
            self::TYPE_SUCCESS,
            'Produit Créé',
            "Votre produit \"{$productName}\" a été créé avec succès et est en attente d'approbation.",
            ['product_name' => $productName],
            '/seller/products'
        );
    }

    /**
     * Notification de modification de produit seller
     */
    public static function sellerProductUpdated(int $sellerId, string $productName): Notification
    {
        return self::notify(
            $sellerId,
            self::TYPE_INFO,
            'Produit Modifié',
            "Votre produit \"{$productName}\" a été modifié avec succès.",
            ['product_name' => $productName],
            '/seller/products'
        );
    }

    /**
     * Notification de création de coupon seller
     */
    public static function sellerCouponCreated(int $sellerId, string $couponCode): Notification
    {
        return self::notify(
            $sellerId,
            self::TYPE_SUCCESS,
            'Coupon Créé',
            "Le coupon \"{$couponCode}\" a été créé avec succès.",
            ['coupon_code' => $couponCode],
            '/seller/coupons'
        );
    }

    /**
     * Notification de soumission KYC seller
     */
    public static function sellerKycSubmitted(int $sellerId): Notification
    {
        return self::notify(
            $sellerId,
            self::TYPE_INFO,
            'Documents KYC Soumis',
            "Vos documents KYC ont été soumis avec succès et sont en attente de vérification.",
            [],
            '/seller/kyc'
        );
    }

    /**
     * Notification de demande de retrait seller créée
     */
    public static function sellerWithdrawalCreated(int $sellerId, float $amount): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $sellerId,
            self::TYPE_INFO,
            'Demande de Retrait Soumise',
            "Votre demande de retrait de {$formattedAmount} FCFA a été soumise et est en attente de traitement.",
            ['amount' => $amount],
            '/seller/wallet/withdrawals'
        );
    }

    /**
     * Notification compte seller activé/désactivé
     */
    public static function sellerAccountStatus(int $sellerId, bool $isActive): Notification
    {
        $type = $isActive ? self::TYPE_SUCCESS : self::TYPE_ALERT;
        $title = $isActive ? 'Compte Activé' : 'Compte Désactivé';
        $message = $isActive 
            ? 'Votre compte vendeur a été activé. Vous pouvez maintenant vendre sur la plateforme.'
            : 'Votre compte vendeur a été désactivé. Contactez le support pour plus d\'informations.';

        return self::notify($sellerId, $type, $title, $message, ['is_active' => $isActive], '/seller/dashboard');
    }

    /**
     * Notification boutique mise en avant
     */
    public static function sellerFeatured(int $sellerId, bool $isFeatured): Notification
    {
        $type = $isFeatured ? self::TYPE_SUCCESS : self::TYPE_INFO;
        $title = $isFeatured ? '⭐ Boutique Mise en Avant !' : 'Mise en Avant Retirée';
        $message = $isFeatured 
            ? 'Félicitations ! Votre boutique est maintenant mise en avant sur la plateforme.'
            : 'La mise en avant de votre boutique a été retirée.';

        return self::notify($sellerId, $type, $title, $message, ['is_featured' => $isFeatured], '/seller/dashboard');
    }

    /**
     * Notification taux de commission modifié
     */
    public static function sellerCommissionRateChanged(int $sellerId, float $newRate): Notification
    {
        return self::notify(
            $sellerId,
            self::TYPE_INFO,
            'Taux de Commission Modifié',
            "Votre taux de commission a été modifié à {$newRate}%.",
            ['commission_rate' => $newRate],
            '/seller/commissions'
        );
    }

    /**
     * Notification preuve de livraison validée/rejetée
     */
    public static function sellerDeliveryProofStatus(int $sellerId, string $orderNumber, string $status, ?string $reason = null): Notification
    {
        $type = $status === 'approved' ? self::TYPE_SUCCESS : self::TYPE_ALERT;
        $title = $status === 'approved' ? 'Preuve de Livraison Validée' : 'Preuve de Livraison Rejetée';
        $message = $status === 'approved' 
            ? "La preuve de livraison pour la commande #{$orderNumber} a été validée."
            : "La preuve de livraison pour la commande #{$orderNumber} a été rejetée." . ($reason ? " Raison : {$reason}" : '');

        return self::notify($sellerId, $type, $title, $message, ['order_number' => $orderNumber, 'status' => $status], '/seller/orders');
    }

    /**
     * Notification commission reçue pour le seller
     */
    public static function sellerCommissionReceived(int $sellerId, float $amount, string $orderNumber): Notification
    {
        $formattedAmount = number_format($amount, 0, ',', ' ');
        return self::notify(
            $sellerId,
            self::TYPE_SUCCESS,
            '💰 Commission Reçue',
            "Vous avez reçu une commission de {$formattedAmount} FCFA pour la commande #{$orderNumber}.",
            ['amount' => $amount, 'order_number' => $orderNumber],
            '/seller/commissions'
        );
    }

    // ==================== METHODES UTILITAIRES ====================

    public function getUnreadCount(User $user)
    {
        return Notification::where('user_id', $user->id)
            ->where('is_read', false)
            ->count();
    }

    public function markAllAsRead(User $user)
    {
        Notification::where('user_id', $user->id)
            ->where('is_read', false)
            ->update([
                'is_read' => true,
                'read_at' => now(),
            ]);
    }

    public function getRecent(User $user, $limit = 10)
    {
        return Notification::where('user_id', $user->id)
            ->orderBy('created_at', 'desc')
            ->limit($limit)
            ->get();
    }

    public function deleteOldNotifications($days = 30)
    {
        $deleted = Notification::where('created_at', '<', now()->subDays($days))
            ->where('is_read', true)
            ->delete();

        Log::info('Anciennes notifications supprimées', ['count' => $deleted]);

        return $deleted;
    }

    public function notifyOrderStatus($order)
    {
        $messages = [
            'confirmed' => 'Votre commande a été confirmée.',
            'processing' => 'Votre commande est en cours de préparation.',
            'shipped' => 'Votre commande a été expédiée.',
            'delivered' => 'Votre commande a été livrée.',
            'cancelled' => 'Votre commande a été annulée.',
        ];

        $message = $messages[$order->status] ?? "Statut de commande mis à jour: {$order->status}";

        $this->send(
            $order->user,
            'order_status',
            "Commande #{$order->order_number}",
            $message,
            ['order_id' => $order->id],
            "/orders/{$order->id}"
        );
    }

    public function notifyCommission($user, $commission)
    {
        $this->send(
            $user,
            'commission',
            'Nouvelle commission reçue',
            "Vous avez reçu une commission de " . number_format($commission->amount, 0, ',', ' ') . " XOF",
            ['commission_id' => $commission->id],
            "/dashboard/commissions"
        );
    }

    /**
     * Notifier le vendeur qu'un paiement a été crédité sur son wallet
     */
    public function notifyPaymentReceived($seller, $order, $amount)
    {
        if (!$seller || !$seller->user) {
            return;
        }

        $formattedAmount = number_format($amount, 0, ',', ' ');
        
        $this->send(
            $seller->user,
            'payment',
            'Paiement reçu',
            "Votre wallet a été crédité de {$formattedAmount} XOF pour la commande #{$order->order_number}. La preuve de livraison a été validée.",
            [
                'order_id' => $order->id,
                'order_number' => $order->order_number,
                'amount' => $amount,
                'seller_id' => $seller->id
            ],
            "/seller/wallet"
        );
    }

    /**
     * Envoyer un email de notification
     */
    protected function sendEmail(User $user, string $title, string $message)
    {
        try {
            // Vérifier si les notifications email sont activées globalement
            if (!Setting::get('email_notifications_enabled', true)) {
                return;
            }

            Mail::send([], [], function ($mail) use ($user, $title, $message) {
                $mail->to($user->email)
                     ->subject($title)
                     ->html("
                        <div style='font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;'>
                            <div style='background: linear-gradient(135deg, #3b82f6, #8b5cf6); padding: 20px; text-align: center;'>
                                <h1 style='color: white; margin: 0;'>" . config('app.name', 'LeBon.ci') . "</h1>
                            </div>
                            <div style='padding: 30px; background: #f9fafb;'>
                                <h2 style='color: #1f2937; margin-top: 0;'>{$title}</h2>
                                <p style='color: #4b5563; line-height: 1.6;'>{$message}</p>
                            </div>
                            <div style='padding: 20px; background: #e5e7eb; text-align: center;'>
                                <p style='color: #6b7280; font-size: 12px; margin: 0;'>
                                    © " . date('Y') . " " . config('app.name', 'LeBon.ci') . ". Tous droits réservés.
                                </p>
                            </div>
                        </div>
                     ");
            });
        } catch (\Exception $e) {
            Log::error('Erreur envoi email notification: ' . $e->getMessage(), [
                'user_id' => $user->id,
                'email' => $user->email,
                'title' => $title
            ]);
        }
    }

    /**
     * Envoyer une notification Telegram
     */
    protected function sendTelegram(string $chatId, string $message)
    {
        try {
            $botToken = Setting::get('telegram_bot_token');
            
            if (!$botToken) {
                Log::warning('Telegram bot token non configuré');
                return;
            }

            Http::post("https://api.telegram.org/bot{$botToken}/sendMessage", [
                'chat_id' => $chatId,
                'text' => $message,
                'parse_mode' => 'HTML'
            ]);
        } catch (\Exception $e) {
            Log::error('Erreur envoi Telegram: ' . $e->getMessage(), [
                'chat_id' => $chatId
            ]);
        }
    }
}
