<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

/**
 * Notification d'alerte système pour les administrateurs
 * 
 * Envoyée automatiquement quand des problèmes sont détectés:
 * - Retraits en attente trop longtemps
 * - Espace disque faible
 * - Erreurs dans les logs
 * - etc.
 */
class SystemAlertNotification extends Notification implements ShouldQueue
{
    use Queueable;

    protected array $alerts;

    /**
     * Create a new notification instance.
     */
    public function __construct(array $alerts)
    {
        $this->alerts = $alerts;
    }

    /**
     * Get the notification's delivery channels.
     */
    public function via(object $notifiable): array
    {
        return ['mail', 'database'];
    }

    /**
     * Get the mail representation of the notification.
     */
    public function toMail(object $notifiable): MailMessage
    {
        $dangerCount = collect($this->alerts)->where('type', 'danger')->count();
        $warningCount = collect($this->alerts)->where('type', 'warning')->count();
        
        $subject = $dangerCount > 0 
            ? '🚨 ALERTE CRITIQUE - ' . config('app.name')
            : '⚠️ Alertes système - ' . config('app.name');
        
        $mail = (new MailMessage)
            ->subject($subject)
            ->greeting('Attention Administrateur !')
            ->line('Le système de monitoring a détecté les problèmes suivants:')
            ->line('---');
        
        foreach ($this->alerts as $alert) {
            $icon = match($alert['type']) {
                'danger' => '🚨',
                'warning' => '⚠️',
                default => 'ℹ️',
            };
            
            $mail->line("**{$icon} {$alert['title']}**");
            $mail->line($alert['message']);
            
            if (!empty($alert['action'])) {
                $mail->line("[Voir les détails]({$alert['action']})");
            }
            
            $mail->line('---');
        }
        
        $mail->line('**Résumé:**')
            ->line("- 🚨 Alertes critiques: {$dangerCount}")
            ->line("- ⚠️ Avertissements: {$warningCount}")
            ->line('---');
        
        $mail->action('Accéder au Dashboard', route('admin.dashboard'))
            ->line('Ce message a été généré automatiquement par le système de monitoring.')
            ->line('Date: ' . now()->format('d/m/Y à H:i:s'));
        
        return $mail;
    }

    /**
     * Get the array representation of the notification.
     */
    public function toArray(object $notifiable): array
    {
        $dangerCount = collect($this->alerts)->where('type', 'danger')->count();
        $warningCount = collect($this->alerts)->where('type', 'warning')->count();
        
        return [
            'type' => 'system_alert',
            'alerts' => $this->alerts,
            'danger_count' => $dangerCount,
            'warning_count' => $warningCount,
            'message' => $dangerCount > 0 
                ? "🚨 {$dangerCount} alerte(s) critique(s) détectée(s)"
                : "⚠️ {$warningCount} avertissement(s) système",
            'action_url' => route('admin.dashboard'),
        ];
    }
}
