<?php
defined('ABSPATH') || exit;

// -------------------------
// Traitement du formulaire Déblocage IP
// -------------------------
if (isset($_POST['ip_to_unblock']) && $_POST['ip_to_unblock'] != "") {
    $ip_to_unblock = trim(sanitize_text_field($_POST['ip_to_unblock']));

    // Déblocage de l'IP (logique + notification centralisées dans bruteForce.php)
    hpixl_securicheck_debloquer_ip($ip_to_unblock);

    echo '<div class="notice notice-success"><p>Adresse IP débloquée : ' . esc_html($ip_to_unblock) . '</p></div>';
}

// -------------------------
// Récupération des IP bloquées (avec expiration)
// -------------------------
global $wpdb;
$tableLogConnexions = $wpdb->prefix . HPIXL_SECURICHECK_TABLE_AUDIT_LOGS_CONNEXIONS;

$results = $wpdb->get_col("SELECT DISTINCT ip FROM $tableLogConnexions WHERE etat = 'failed'");
$blocked_ips = []; // format: [ '1.2.3.4' => $expires_at_timestamp|null ]

foreach ($results as $ip) {
    $ip = trim($ip);
    if (empty($ip)) {
        continue;
    }

    $transient_key = 'blocked_ip_' . $ip;
    $val = get_transient($transient_key);

    if ($val !== false) {
        // Si la valeur du transient est un timestamp (recommandé), on l'utilise.
        if (is_numeric($val) && intval($val) > 0) {
            $expires_at = intval($val);
        } else {
            // Sinon on tente de récupérer le timeout stocké en option par WP
            $timeout_option = get_option('_transient_timeout_' . $transient_key);
            $expires_at = ($timeout_option !== false) ? intval($timeout_option) : null;
        }

        $blocked_ips[$ip] = $expires_at; // peut être null si impossible à déterminer
    }
}

// helper pour formater le temps restant en HH:MM:SS
if (!function_exists('hpixl_securicheck_format_seconds')) {
    function hpixl_securicheck_format_seconds($seconds)
    {
        $seconds = max(0, intval($seconds));
        $h = floor($seconds / 3600);
        $m = floor(($seconds % 3600) / 60);
        $s = $seconds % 60;
        if ($h > 0) {
            return sprintf('%02dh %02dm %02ds', $h, $m, $s);
        } elseif ($m > 0) {
            return sprintf('%02dm %02ds', $m, $s);
        } else {
            return sprintf('%02ds', $s);
        }
    }
}
?>

<?php $brute_force_enabled = get_option('hpixl_securicheck_toggle_brute_force') == 1; ?>

<div class="hpixl-securicheck-settings-form-panel">
    <div class="hpixl-securicheck-section" style="padding:20px;margin-bottom:20px;border-radius:0px!important;">
        <strong style="font-size:14px; display:block; margin-bottom:10px;"><?php esc_html_e('IP Bloquées', 'securicheck'); ?></strong>
        <p style="margin:0 0 6px;"><?php esc_html_e('Retrouvez ici la liste des adresses IP actuellement bloquées suite à un trop grand nombre de tentatives de connexion échouées.', 'securicheck'); ?></p>
        <p style="margin:0;"><?php esc_html_e('Vous pouvez débloquer manuellement une IP à tout moment en cliquant sur le bouton "Débloquer".', 'securicheck'); ?></p>
    </div>
</div>

<?php if (!$brute_force_enabled): ?>
    <div class="notice notice-warning inline" style="margin:0 0 16px;padding:10px 12px;">
        <p><?php esc_html_e('La protection Brute Force est désactivée. Activez-la dans l\'onglet "Protection Brute Force" pour que des IPs puissent être bloquées.', 'securicheck'); ?></p>
    </div>
<?php endif; ?>

<div style="<?php echo !$brute_force_enabled ? 'opacity:0.4;pointer-events:none;' : ''; ?>">
<table class="wp-list-table widefat striped">
    <thead>
        <tr>
            <th>Adresse IP</th>
            <th>Bloquée jusqu'à</th>
            <th>Temps restant</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        <?php if (!empty($blocked_ips)): ?>
            <?php foreach ($blocked_ips as $ip => $expires_at): ?>
                <tr>
                    <td><?php echo esc_html($ip); ?></td>
                    <td>
                        <?php
                        if ($expires_at && $expires_at > 0) {
                            echo esc_html(wp_date('Y-m-d H:i:s', $expires_at));
                        } else {
                            echo esc_html('Inconnu');
                        }
                        ?>
                    </td>
                    <td>
                        <?php
                        if ($expires_at && $expires_at > 0) {
                            $remaining = max(0, $expires_at - time());
                            if ($remaining > 0) {
                                echo esc_html(hpixl_securicheck_format_seconds($remaining));
                            } else {
                                echo esc_html('Expiré');
                            }
                        } else {
                            echo esc_html('—');
                        }
                        ?>
                    </td>
                    <td>
                        <form method="post" action="" style="display:inline;">
                            <?php wp_nonce_field('debloquer_ip_action', 'debloquer_ip_nonce'); ?>
                            <input type="hidden" name="ip_to_unblock" value="<?php echo esc_attr($ip); ?>">
                            <button type="submit" class="button" name="debloquer_action" value="debloquer">Débloquer</button>
                        </form>
                    </td>
                </tr>
            <?php endforeach; ?>
        <?php else: ?>
            <tr>
                <td colspan="4">Aucune IP actuellement bloquée.</td>
            </tr>
        <?php endif; ?>
    </tbody>
</table>
</div>