#!/usr/bin/env php
<?php
/**
 * Script de test pour la whitelist dynamique
 * Usage: php scripts/test_whitelist.php [refresh]
 */

require_once __DIR__ . '/../src/Services/Security/IPBlocker.php';

use App\Services\Security\IPBlocker;

echo "=== Test de la whitelist dynamique depuis IN3 ===\n\n";

// Si l'argument "refresh" est passé, forcer le rafraîchissement
if (isset($argv[1]) && $argv[1] === 'refresh') {
    echo "Forçage du rafraîchissement de la whitelist...\n";
    $ips = IPBlocker::refreshDynamicWhitelist();
    echo "✓ Whitelist rafraîchie\n\n";
}

// Test 1: Récupérer les IPs whitelistées
echo "1. IPs whitelistées statiques:\n";
$staticWhitelist = IPBlocker::WHITELIST;
foreach ($staticWhitelist as $ip) {
    echo "   - $ip\n";
}

echo "\n2. Récupération de la whitelist dynamique depuis IN3...\n";
try {
    // Forcer le rafraîchissement pour le test
    $dynamicIps = IPBlocker::refreshDynamicWhitelist();

    if (empty($dynamicIps)) {
        echo "   ⚠ Aucune IP dynamique récupérée\n";
        echo "   Vérifiez:\n";
        echo "   - La connexion SSH vers IN3 (195.154.80.116)\n";
        echo "   - L'existence du fichier /var/bat/IP sur IN3\n";
        echo "   - Les clés SSH sont configurées pour root@IN3\n";
    } else {
        echo "   ✓ IPs dynamiques récupérées:\n";
        foreach ($dynamicIps as $ip) {
            echo "   - $ip\n";
        }
    }
} catch (Exception $e) {
    echo "   ✗ Erreur: " . $e->getMessage() . "\n";
}

// Test 2: Vérifier le fichier de cache
echo "\n3. Vérification du cache local:\n";
$cacheFile = __DIR__ . '/../config/whitelist_ip_cache.txt';
if (file_exists($cacheFile)) {
    $cacheData = json_decode(file_get_contents($cacheFile), true);
    if ($cacheData) {
        echo "   ✓ Cache trouvé:\n";
        echo "   - IP: " . ($cacheData['ip'] ?? 'N/A') . "\n";
        echo "   - Récupéré le: " . ($cacheData['retrieved_at'] ?? 'N/A') . "\n";
        echo "   - Timestamp: " . ($cacheData['timestamp'] ?? 'N/A') . "\n";

        $age = time() - ($cacheData['timestamp'] ?? 0);
        $ageMinutes = round($age / 60);
        echo "   - Âge du cache: $ageMinutes minutes\n";

        if ($age > 3600) {
            echo "   ⚠ Le cache a plus d'1 heure et sera rafraîchi au prochain appel\n";
        }
    } else {
        echo "   ⚠ Cache invalide\n";
    }
} else {
    echo "   - Pas de cache local trouvé\n";
}

// Test 3: Tester quelques IPs
echo "\n4. Test de blocage pour quelques IPs:\n";
$testIps = [
    '127.0.0.1' => 'Localhost (whitelist statique)',
    '8.8.8.8' => 'Google DNS (non whitelisté)',
];

// Ajouter l'IP dynamique si elle existe
if (!empty($dynamicIps) && isset($dynamicIps[0])) {
    $testIps[$dynamicIps[0]] = 'IP depuis IN3 (whitelist dynamique)';
}

foreach ($testIps as $ip => $description) {
    $isWhitelisted = IPBlocker::isWhitelisted($ip);
    $isBlocked = IPBlocker::isBlocked($ip);

    echo "   - $ip ($description):\n";
    echo "     Whitelisté: " . ($isWhitelisted ? '✓ Oui' : '✗ Non') . "\n";
    echo "     Bloqué: " . ($isBlocked ? '✗ Oui' : '✓ Non') . "\n";
}

echo "\n=== Fin du test ===\n";