/* -------------------------------------------------------------
   VOIDSPIDER - URL‑Logger für Hubzilla – mit KLICK‑Counter & Ausschluss-Prüfung
   2026 by 𝖜𝖆𝖗𝖟𝖆𝖟𝖊𝖑⛧ - www.voidofxulub.com @license MIT
   Wiki: https://voidofxulub.com/wiki/warzazel
   ------------------------------------------------------------- */
  
error_log('=== URL-LOGGER START ===');

/* 1️⃣ Debugging: Alle relevanten Server-Variablen loggen */
error_log('=== RAW SERVER VARS ===');
error_log('REQUEST_URI: ' . ($_SERVER['REQUEST_URI'] ?? 'nicht gesetzt'));
error_log('PATH_INFO: ' . ($_SERVER['PATH_INFO'] ?? 'nicht gesetzt'));
error_log('QUERY_STRING: ' . ($_SERVER['QUERY_STRING'] ?? 'nicht gesetzt'));
error_log('REQUEST_URI HEX: ' . bin2hex($_SERVER['REQUEST_URI'] ?? ''));

/* 2️⃣ Aktuelle URL holen und dekodieren */
$url = $_SERVER['REQUEST_URI'] ?? '';
error_log('REQUEST_URI RAW: ' . $url);

// URL dekodieren (mehrfach, falls nötig)
$previous = '';
while ($previous !== $url) {
    $previous = $url;
    $url = urldecode($url);
}
error_log('REQUEST_URI DECODED: ' . $url);

// ✅ Hubzilla's Hex-Encoding für ALLE URLs rückgängig machen
$url = preg_replace_callback('/\(([0-9a-f]{2,4})\)/i', function($matches) {
    return hex2bin($matches[1]);
}, $url);
error_log('URL nach Hex-Decode: ' . $url);

// Anführungszeichen entfernen
$url = str_replace('"', '', $url);
error_log('URL nach Quote-Removal: ' . $url);

// Weitere Bereinigungen (optional)
$url = trim($url);

error_log('REQUEST_URI CLEANED: ' . $url);

if ($url !== '') {

    /* 3️⃣ Zeitzone setzen */
    date_default_timezone_set('Europe/Berlin');

    /* 4️⃣ Timestamp erzeugen */
    $timestamp = date('Y-m-d H:i:s');
    error_log('TIMESTAMP: ' . $timestamp);

    /* ---------------------------------------------------------
       5️⃣ MySQL‑Eintrag mit Hit‑Counter & Ausschluss-Prüfung
       --------------------------------------------------------- */
    // ----> Konfiguration – bitte an deine Umgebung anpassen <----
    $dbHost = 'localhost';
    $dbName = '...';
    $dbUser = '...';
    $dbPass = '...';
    $dbPort = 3306;
    // ---------------------------------------------------------

    try {
        error_log('Versuche DB-Verbindung...');
        $dsn = "mysql:host=$dbHost;port=$dbPort;dbname=$dbName;charset=utf8mb4";
        $pdo = new PDO($dsn, $dbUser, $dbPass, [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]);
        
        // ✅ Charset explizit setzen
        $pdo->exec("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci");
        
        error_log('DB-VERBINDUNG ERFOLGREICH');
        
        // Charset-Check
        $charset = $pdo->query("SELECT @@character_set_client, @@character_set_connection, @@character_set_results")->fetch();
        error_log('DB-CHARSET: ' . json_encode($charset));

        /* ============================================================
           🚨 NEU: PRÜFEN, OB URL IN AUSSCHLUSSLISTE IST
           ============================================================ */
        error_log('Prüfe Ausschlussliste für URL: ' . $url);
        $excludeCheckStmt = $pdo->prepare('SELECT COUNT(*) as cnt FROM ausschluss WHERE url = :url');
        $excludeCheckStmt->execute([':url' => $url]);
        $isExcluded = ($excludeCheckStmt->fetchColumn() > 0);
        
        if ($isExcluded) {
            error_log('🚫 URL IST IN AUSSCHLUSSLISTE - KEIN TRACKING: ' . $url);
            error_log('=== URL-LOGGER END (EXCLUDED) ===');
            return; // ✅ Abbruch - kein Tracking
        }
        
        error_log('✅ URL NICHT IN AUSSCHLUSSLISTE - TRACKING LÄUFT');

        /* ============================================================
           NUR HIER WEITERMACHEN, WENN URL NICHT AUSGESCHLOSSEN IST
           ============================================================ */
        
        // Prüfe, ob diese URL bereits existiert
        error_log('Prüfe ob URL existiert: ' . $url);
        $checkStmt = $pdo->prepare('SELECT id FROM url_hits WHERE url = :url');
        $checkStmt->execute([':url' => $url]);
        $existing = $checkStmt->fetch();
        error_log('Existiert: ' . ($existing ? 'JA' : 'NEIN'));

        if ($existing) {
            error_log('Führe UPDATE aus...');
            $updateStmt = $pdo->prepare(
                'UPDATE url_hits SET hitcount = hitcount + 1, ts = :ts WHERE url = :url'
            );
            $updateStmt->execute([
                ':ts'  => $timestamp,
                ':url' => $url,
            ]);
            error_log('URL UPDATE ERFOLGREICH: ' . $url);
        } else {
            error_log('Führe INSERT aus...');
            $insertStmt = $pdo->prepare(
                'INSERT INTO url_hits (ts, url, hitcount, own_slugs) VALUES (:ts, :url, 1, NULL)'
            );
            $insertStmt->execute([
                ':ts'  => $timestamp,
                ':url' => $url,
            ]);
            error_log('URL INSERT ERFOLGREICH: ' . $url);
        }

        error_log('=== URL-LOGGER END (SUCCESS) ===');

    } catch (PDOException $e) {
        error_log('URL‑Logger (MySQL) FEHLER: ' . $e->getMessage());
        error_log('=== URL-LOGGER END (ERROR) ===');
    }

} else {
    error_log('URL IST LEER - KEIN EINTRAG');
    error_log('=== URL-LOGGER END (EMPTY) ===');
}