<?php
require_once __DIR__ . '/../config.php';

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

// Controllo accesso
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {
    http_response_code(403);
    die('Accesso negato');
}

if (!isset($_GET['id'])) {
    http_response_code(400);
    die('ID incidente mancante');
}

$incidentId = $_GET['id'];

// Recuperiamo i dati dal file JSON condiviso
$incidents = require_once __DIR__ . '/../incidents.php';

$incident = null;
foreach ($incidents as $inc) {
    if ($inc['id'] === $incidentId) {
        $incident = $inc;
        break;
    }
}
if (!$incident) {
    http_response_code(404);
    die('Incidente non trovato');
}

// 1. Otteniamo le contromisure immediate (tramite logica switch/if) e l'analisi AI (Groq)
$localAdvice = getLocalAdvice($incident['tipo']);
$aiAdvice = getAiAdvice($incident);

// 2. Generiamo il PDF con DomPDF
$searchPaths = [
    __DIR__ . '/../../lib/dompdf/autoload.inc.php',
    __DIR__ . '/../../lib/dompdf/vendor/autoload.php',
    __DIR__ . '/../../../lib/dompdf/autoload.inc.php',
    __DIR__ . '/../../../lib/dompdf/vendor/autoload.php',
    __DIR__ . '/../../vendor/autoload.php',
    __DIR__ . '/../../../vendor/autoload.php',
];

$dompdfAutoload = null;
foreach ($searchPaths as $path) {
    if (file_exists($path)) {
        $dompdfAutoload = $path;
        break;
    }
}

if (!$dompdfAutoload) {
    http_response_code(500);
    die('Errore interno: libreria DomPDF non trovata. Percorsi cercati: ' . htmlspecialchars(implode(', ', $searchPaths)));
}

require_once $dompdfAutoload;
$dompdf = new \Dompdf\Dompdf();

// Costruiamo l'HTML del report
$html = '
<style>
    body { font-family: Arial, sans-serif; margin: 40px; color: #333; }
    h1 { color: #b30000; }
    .info { background: #f9f9f9; padding: 15px; border-left: 5px solid #b30000; margin-bottom: 20px; }
    .advice-box { background: #fff3cd; padding: 15px; border-left: 5px solid #ffc107; margin-bottom: 20px; }
    .ai-box { background: #eef; padding: 15px; border-radius: 5px; margin-top: 20px; }
</style>
<h1>SecureNet Cloud - Incident Report</h1>
<div class="info">
    <p><strong>ID Incidente:</strong> ' . htmlspecialchars($incident['id']) . '</p>
    <p><strong>IP Attaccante:</strong> ' . htmlspecialchars($incident['ip']) . '</p>
    <p><strong>Tipo di Minaccia:</strong> ' . htmlspecialchars($incident['tipo']) . '</p>
    <p><strong>Livello di Pericolo:</strong> ' . htmlspecialchars($incident['pericolo']) . '</p>
    <p><strong>Stato:</strong> ' . htmlspecialchars($incident['stato']) . '</p>
    <p><strong>Data/Ora:</strong> ' . htmlspecialchars($incident['data']) . '</p>
</div>
<div class="advice-box">
    <h3>Contromisure Immediate Consigliate</h3>
    <p>' . htmlspecialchars($localAdvice) . '</p>
</div>
<div class="ai-box">
    <h3>Analisi e Contromisure (AI)</h3>
    <p>' . nl2br(htmlspecialchars($aiAdvice)) . '</p>
</div>
';

$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream('Incident_Report_' . $incidentId . '.pdf', ['Attachment' => true]);

/**
 * Chiama l'API Groq per ottenere un'analisi approfondita dell'incidente.
 */
function getAiAdvice($incident) {
    $prompt = "Sei un esperto di cybersecurity. Analizza il seguente incidente e fornisci una risposta professionale dettagliata (circa 150 parole) che includa: spiegazione della minaccia, impatto potenziale e contromisure specifiche. " .
              "Incidente: Tipo " . $incident['tipo'] . ", IP " . $incident['ip'] . ", Pericolo " . $incident['pericolo'] . ", Stato " . $incident['stato'] . ".";
    
    $data = [
        'model' => GROQ_MODEL,
        'messages' => [
            ['role' => 'user', 'content' => $prompt]
        ],
        'temperature' => 0.7
    ];

    $options = [
        'http' => [
            'method' => 'POST',
            'header'  => "Content-Type: application/json\r\n" .
                         "Authorization: Bearer " . GROQ_API_KEY . "\r\n",
            'content' => json_encode($data),
            'timeout' => 30
        ]
    ];

    $context = stream_context_create($options);
    $result = @file_get_contents('https://api.groq.com/openai/v1/chat/completions', false, $context);
    if ($result === FALSE) {
        return "Analisi AI non disponibile al momento. Contromisura di base: verificare i log e isolare l'host.";
    }

    $response = json_decode($result, true);
    return $response['choices'][0]['message']['content'] ?? "Nessuna risposta AI ricevuta.";
}