<?php
require_once __DIR__ . '/config.php';
session_start();
function h($v): string { return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); }
function db(): PDO {
    if (!is_dir(PRIVATE_DIR)) mkdir(PRIVATE_DIR, 0750, true);
    $pdo = new PDO('sqlite:' . DB_PATH);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec("CREATE TABLE IF NOT EXISTS visits (
        id INTEGER PRIMARY KEY AUTOINCREMENT, ip TEXT NOT NULL, ip_type TEXT NOT NULL, reverse_dns TEXT,
        browser TEXT, os TEXT, user_agent TEXT, accept_language TEXT, referer TEXT, host TEXT, remote_port TEXT,
        https INTEGER, request_method TEXT, created_at TEXT NOT NULL)");
    return $pdo;
}
if (isset($_GET['logout'])) { session_destroy(); header('Location: /stats.php'); exit; }
$error='';
if ($_SERVER['REQUEST_METHOD']==='POST') {
    if (hash_equals(STATS_PASSWORD, $_POST['password'] ?? '')) { $_SESSION['stats_ok']=true; header('Location: /stats.php'); exit; }
    $error='Onjuist wachtwoord.';
}
if (empty($_SESSION['stats_ok'])): ?>
<!DOCTYPE html><html lang="nl"><head><meta charset="UTF-8"><title>Statistieken - <?=h(SITE_NAME)?></title><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/assets/css/style.css"></head><body><div class="wrap"><div class="login card"><div class="badge">Beveiligd</div><h1 style="font-size:38px">Statistieken</h1><?php if($error):?><p class="no"><?=h($error)?></p><?php endif;?><form method="post"><label>Wachtwoord</label><input type="password" name="password" required autofocus><button type="submit">Inloggen</button></form><p class="footer"><a href="/">Terug naar home</a></p></div></div></body></html><?php exit; endif;
$pdo = db();
$total=(int)$pdo->query("SELECT COUNT(*) FROM visits")->fetchColumn();
$unique=(int)$pdo->query("SELECT COUNT(DISTINCT ip) FROM visits")->fetchColumn();
$ipv4=(int)$pdo->query("SELECT COUNT(*) FROM visits WHERE ip_type='IPv4'")->fetchColumn();
$ipv6=(int)$pdo->query("SELECT COUNT(*) FROM visits WHERE ip_type='IPv6'")->fetchColumn();
$latest=$pdo->query("SELECT * FROM visits ORDER BY id DESC LIMIT 100")->fetchAll(PDO::FETCH_ASSOC);
$top=$pdo->query("SELECT ip, ip_type, COUNT(*) c, MAX(created_at) last_seen FROM visits GROUP BY ip, ip_type ORDER BY c DESC LIMIT 25")->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html><html lang="nl"><head><meta charset="UTF-8"><title>IP Statistieken - <?=h(SITE_NAME)?></title><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/assets/css/style.css"></head><body><div class="wrap">
<nav class="nav"><a class="brand" href="/"><span class="brand-dot"></span><span><?=h(SITE_NAME)?> Dashboard</span></a><div class="nav-links"><a href="/">Home</a><a href="/ip.php">IP-check</a><a href="/stats.php?logout=1">Uitloggen</a></div></nav>
<section class="card"><div class="badge">Dashboard</div><h1 style="font-size:44px">IP-statistieken</h1><div class="stats"><div class="tool-card stat"><div class="name">Totaal checks</div><div class="num"><?=number_format($total,0,',','.')?></div></div><div class="tool-card stat"><div class="name">Unieke IP's</div><div class="num"><?=number_format($unique,0,',','.')?></div></div><div class="tool-card stat"><div class="name">IPv4</div><div class="num"><?=number_format($ipv4,0,',','.')?></div></div><div class="tool-card stat"><div class="name">IPv6</div><div class="num"><?=number_format($ipv6,0,',','.')?></div></div></div></section>
<section class="card section"><h2>Top 25 IP-adressen</h2><table><thead><tr><th>IP</th><th>Type</th><th>Aantal</th><th>Laatst gezien</th></tr></thead><tbody><?php foreach($top as $r):?><tr><td><?=h($r['ip'])?></td><td><?=h($r['ip_type'])?></td><td><?=h($r['c'])?></td><td><?=h(date('d-m-Y H:i:s',strtotime($r['last_seen'])))?></td></tr><?php endforeach;?></tbody></table></section>
<section class="card section"><h2>Laatste 100 checks</h2><table><thead><tr><th>Tijd</th><th>IP</th><th>Type</th><th>Browser</th><th>OS</th><th>Reverse DNS</th><th>Host</th><th>User Agent</th></tr></thead><tbody><?php foreach($latest as $r):?><tr><td><?=h(date('d-m-Y H:i:s',strtotime($r['created_at'])))?></td><td><?=h($r['ip'])?></td><td><?=h($r['ip_type'])?></td><td><?=h($r['browser'] ?? '')?></td><td><?=h($r['os'] ?? '')?></td><td><?=h($r['reverse_dns'] ?? '')?></td><td><?=h($r['host'] ?? '')?></td><td><?=h($r['user_agent'] ?? '')?></td></tr><?php endforeach;?></tbody></table><p class="footer">Let op: IP-adressen kunnen persoonsgegevens zijn.</p></section>
</div></body></html>
