<?php
declare(strict_types=1);
require __DIR__ . '/lib/Auth.php';
require __DIR__ . '/lib/Layout.php';
require __DIR__ . '/../api/lib/Db.php';

use PSLauncher\Admin\Auth;
use PSLauncher\Admin\Layout;
use PSLauncher\Db;

Auth::requireLogin();
$config = require __DIR__ . '/../api/config.php';
$db = Db::get($config);

$page     = max(1, (int)($_GET['page'] ?? 1));
$pageSize = 100;
$offset   = ($page - 1) * $pageSize;
$filter   = trim((string)($_GET['event'] ?? ''));

$where = '';
$params = [];
if ($filter !== '') {
    $where = 'WHERE event = ?';
    $params[] = $filter;
}

$total = (int)$db->prepare("SELECT COUNT(*) FROM audit_log $where")->execute($params) ?? 0;
$totalStmt = $db->prepare("SELECT COUNT(*) FROM audit_log $where");
$totalStmt->execute($params);
$total = (int)$totalStmt->fetchColumn();
$totalPages = max(1, (int)ceil($total / $pageSize));

$listStmt = $db->prepare("SELECT a.*, l.owner_name FROM audit_log a LEFT JOIN licenses l ON l.id = a.license_id $where ORDER BY a.id DESC LIMIT $pageSize OFFSET $offset");
$listStmt->execute($params);
$rows = $listStmt->fetchAll();

$eventTypes = $db->query('SELECT DISTINCT event FROM audit_log ORDER BY event')->fetchAll(\PDO::FETCH_COLUMN);

Layout::header('Audit', 'audit');
?>
<h1>Audit log</h1>

<div class="card">
    <form method="get" class="toolbar">
        <label style="margin: 0;">Filtrer par événement :</label>
        <select name="event" onchange="this.form.submit()">
            <option value="">Tous (<?= number_format($total) ?>)</option>
            <?php foreach ($eventTypes as $ev): ?>
                <option value="<?= htmlspecialchars($ev) ?>" <?= $ev === $filter ? 'selected' : '' ?>>
                    <?= htmlspecialchars($ev) ?>
                </option>
            <?php endforeach; ?>
        </select>
        <?php if ($filter !== ''): ?>
            <a href="audit.php" class="btn btn-secondary">Réinitialiser</a>
        <?php endif; ?>
        <span class="muted" style="margin-left: auto;">page <?= $page ?> / <?= $totalPages ?> • <?= number_format($total) ?> entrée(s)</span>
    </form>

    <?php if (empty($rows)): ?>
        <p class="muted">Aucune entrée d'audit.</p>
    <?php else: ?>
    <table>
        <thead>
            <tr>
                <th>Date</th>
                <th>Événement</th>
                <th>License</th>
                <th>IP</th>
                <th>Détail</th>
            </tr>
        </thead>
        <tbody>
        <?php foreach ($rows as $r):
            $cls = match($r['event']) {
                'validate_ok'         => 'badge-success',
                'validate_invalid', 'validate_revoked', 'machine_limit' => 'badge-danger',
                'validate_expired'    => 'badge-warning',
                default               => 'badge-secondary',
            };
            $detail = $r['detail'] ? json_decode($r['detail'], true) : null;
        ?>
            <tr>
                <td class="muted" style="white-space: nowrap;"><?= htmlspecialchars($r['ts']) ?></td>
                <td><span class="badge <?= $cls ?>"><?= htmlspecialchars($r['event']) ?></span></td>
                <td>
                    <?php if ($r['license_id']): ?>
                        #<?= htmlspecialchars((string)$r['license_id']) ?>
                        <?php if ($r['owner_name']): ?>
                            <span class="muted">(<?= htmlspecialchars($r['owner_name']) ?>)</span>
                        <?php endif; ?>
                    <?php else: ?>
                        <span class="muted">—</span>
                    <?php endif; ?>
                </td>
                <td class="muted"><?= htmlspecialchars($r['ip'] ?? '—') ?></td>
                <td class="muted">
                    <?php if ($detail): ?>
                        <code style="font-size: 11px;"><?= htmlspecialchars(json_encode($detail, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)) ?></code>
                    <?php endif; ?>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>

    <div class="toolbar" style="margin-top:16px; justify-content: space-between;">
        <div>
            <?php if ($page > 1): ?>
                <a href="?<?= http_build_query(['event' => $filter, 'page' => $page - 1]) ?>" class="btn btn-secondary">← Précédent</a>
            <?php endif; ?>
        </div>
        <div>
            <?php if ($page < $totalPages): ?>
                <a href="?<?= http_build_query(['event' => $filter, 'page' => $page + 1]) ?>" class="btn btn-secondary">Suivant →</a>
            <?php endif; ?>
        </div>
    </div>
    <?php endif; ?>
</div>
<?php Layout::footer();
