<?php
// BASIT TEMİZLİK SCRIPTI
// 30+ gün inaktif kullanıcıların verilerini sil

// Web'den açılırsa düzgün görünsün
if (php_sapi_name() !== 'cli') {
    header('Content-Type: text/plain; charset=utf-8');
}

set_time_limit(0);
$start = microtime(true);

// Veritabanı bağlantısı
try {
    $db = new PDO("mysql:host=localhost;dbname=heysen_db;charset=utf8mb4", "heysen_db", "VAXw_jJki{uc");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // DEBUG: Error göster
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
} catch (PDOException $e) {
    die("Bağlantı hatası: " . $e->getMessage());
}

echo "===========================================\n";
echo "🧹 VERİTABANI TEMİZLİĞİ\n";
echo "===========================================\n\n";

// İnaktif kullanıcıları bul (30+ gün, bot değil)
$threshold = time() - (30 * 24 * 60 * 60);
echo "📊 İnaktif kullanıcılar bulunuyor...\n";

$stmt = $db->prepare("SELECT COUNT(*) FROM kullanicilar WHERE user_songiris < ? AND user_bot = 0");
$stmt->execute([$threshold]);
$inactiveCount = $stmt->fetchColumn();

$botCount = $db->query("SELECT COUNT(*) FROM kullanicilar WHERE user_bot = 1")->fetchColumn();

echo "   ✅ İnaktif kullanıcı: " . number_format($inactiveCount) . "\n";
echo "   ✅ Korunan bot: " . number_format($botCount) . "\n\n";

// GERÇEKTEN SİLMEK İÇİN BU SATIRI DEĞİŞTİR
$SILME_MODU = true; // GERÇEK SİLME MODU AKTIF! 🔥

if (!$SILME_MODU) {
    echo "⚠️  TEST MODU - Simülasyon yapılıyor (gerçekten silinmeyecek)\n\n";
} else {
    echo "🔥 SİLME MODU AKTIF!\n\n";
}

// Temp table oluştur
echo "📦 Geçici tablo oluşturuluyor...\n";
$db->exec("DROP TEMPORARY TABLE IF EXISTS temp_inactive");
$db->exec("CREATE TEMPORARY TABLE temp_inactive (user_id INT PRIMARY KEY) ENGINE=MEMORY");
$db->prepare("INSERT INTO temp_inactive SELECT user_id FROM kullanicilar WHERE user_songiris < ? AND user_bot = 0")->execute([$threshold]);
echo "   ✅ Tamamlandı\n\n";

$batchSize = 5000;
$weekAgo = time() - (7 * 24 * 60 * 60);

// 1. Mesajlar
echo "1️⃣  mesajlar kontrol ediliyor...\n";
$stepStart = microtime(true);
$total = 0;

if ($SILME_MODU) {
    do {
        $stmt = $db->query("DELETE FROM mesajlar WHERE id IN (
            SELECT id FROM (
                SELECT m.id FROM mesajlar m 
                INNER JOIN temp_inactive t ON (m.gonderen_id = t.user_id OR m.alan_id = t.user_id) 
                LIMIT {$batchSize}
            ) AS tmp)");
        $deleted = $stmt->rowCount();
        $total += $deleted;
        if ($deleted > 0) echo "   🗑️  " . number_format($total) . " silindi\n";
    } while ($deleted > 0);
    $stepTime = round(microtime(true) - $stepStart, 2);
    echo "   ✅ Silinen: " . number_format($total) . ", Süre: {$stepTime}sn\n\n";
} else {
    echo "   ⏩ TEST modunda sayılmadı (gerçek silmede göreceksin)\n\n";
}

// 2. Begeniler
echo "2️⃣  begeniler kontrol ediliyor...\n";
$stepStart = microtime(true);
$total = 0;

if ($SILME_MODU) {
    echo "   🔍 İlk batch başlıyor...\n";
    flush();
    
    do {
        $retries = 0;
        $maxRetries = 3;
        $deleted = 0;
        
        while ($retries < $maxRetries) {
            try {
                $stmt = $db->query("DELETE FROM begeniler WHERE id IN (
                    SELECT id FROM (
                        SELECT b.id FROM begeniler b 
                        INNER JOIN temp_inactive t ON (b.begenen_id = t.user_id OR b.begenilen_id = t.user_id) 
                        LIMIT {$batchSize}
                    ) AS tmp)");
                $deleted = $stmt->rowCount();
                break; // Başarılı, döngüden çık
            } catch (PDOException $e) {
                if (strpos($e->getMessage(), '1205') !== false) {
                    // Lock timeout
                    $retries++;
                    if ($retries < $maxRetries) {
                        echo "   ⚠️  Kilit hatası, {$retries}. deneme... (3 saniye bekleniyor)\n";
                        flush();
                        sleep(3);
                    } else {
                        echo "   ❌ HATA: Tablo kilitli, 3 deneme başarısız. Begeniler atlandı.\n\n";
                        break 2; // İç ve dış döngüden çık
                    }
                } else {
                    throw $e; // Başka hata, yukarı fırlat
                }
            }
        }
        
        $total += $deleted;
        if ($deleted > 0) {
            echo "   🗑️  " . number_format($total) . " silindi\n";
            flush();
        }
    } while ($deleted > 0);
    
    $stepTime = round(microtime(true) - $stepStart, 2);
    echo "   ✅ Silinen: " . number_format($total) . ", Süre: {$stepTime}sn\n\n";
} else {
    echo "   ⏩ TEST modunda sayılmadı (gerçek silmede göreceksin)\n\n";
}

// 3. Sohbetlog
echo "3️⃣  sohbetlog kontrol ediliyor...\n";
$stepStart = microtime(true);
$total = 0;

if ($SILME_MODU) {
    do {
        $stmt = $db->query("DELETE FROM sohbetlog WHERE id IN (
            SELECT id FROM (
                SELECT s.id FROM sohbetlog s 
                INNER JOIN temp_inactive t ON s.user_id = t.user_id 
                LIMIT {$batchSize}
            ) AS tmp)");
        $deleted = $stmt->rowCount();
        $total += $deleted;
        if ($deleted > 0) echo "   🗑️  " . number_format($total) . " silindi\n";
    } while ($deleted > 0);
    $stepTime = round(microtime(true) - $stepStart, 2);
    echo "   ✅ Silinen: " . number_format($total) . ", Süre: {$stepTime}sn\n\n";
} else {
    echo "   ⏩ TEST modunda sayılmadı (gerçek silmede göreceksin)\n\n";
}

// 4. Jeton log
echo "4️⃣  jeton_senaryo_sifir_log kontrol ediliyor...\n";
$stepStart = microtime(true);
$total = 0;

if ($SILME_MODU) {
    do {
        $stmt = $db->query("DELETE FROM jeton_senaryo_sifir_log WHERE id IN (
            SELECT id FROM (
                SELECT j.id FROM jeton_senaryo_sifir_log j 
                INNER JOIN temp_inactive t ON j.user_id = t.user_id 
                LIMIT {$batchSize}
            ) AS tmp)");
        $deleted = $stmt->rowCount();
        $total += $deleted;
        if ($deleted > 0) echo "   🗑️  " . number_format($total) . " silindi\n";
    } while ($deleted > 0);
    $stepTime = round(microtime(true) - $stepStart, 2);
    echo "   ✅ Silinen: " . number_format($total) . ", Süre: {$stepTime}sn\n\n";
} else {
    echo "   ⏩ TEST modunda sayılmadı (gerçek silmede göreceksin)\n\n";
}

// 5. Aramalar (7+ gün önceki)
echo "5️⃣  aramalar kontrol ediliyor (7+ gün)...\n";
$stepStart = microtime(true);

if ($SILME_MODU) {
    $stmt = $db->query("DELETE FROM aramalar WHERE zaman < {$weekAgo}");
    $total = $stmt->rowCount();
    $stepTime = round(microtime(true) - $stepStart, 2);
    echo "   ✅ Silinen: " . number_format($total) . ", Süre: {$stepTime}sn\n\n";
} else {
    echo "   ⏩ TEST modunda sayılmadı (gerçek silmede göreceksin)\n\n";
}

// 6. Ziyaretler (7+ gün önceki)
echo "6️⃣  ziyaretler kontrol ediliyor (7+ gün)...\n";
$stepStart = microtime(true);

if ($SILME_MODU) {
    $stmt = $db->query("DELETE FROM ziyaretler WHERE time < {$weekAgo}");
    $total = $stmt->rowCount();
    $stepTime = round(microtime(true) - $stepStart, 2);
    echo "   ✅ Silinen: " . number_format($total) . ", Süre: {$stepTime}sn\n\n";
} else {
    echo "   ⏩ TEST modunda sayılmadı (gerçek silmede göreceksin)\n\n";
}

$db->exec("DROP TEMPORARY TABLE IF EXISTS temp_inactive");

$time = round(microtime(true) - $start, 2);
echo "===========================================\n";

if ($SILME_MODU) {
    echo "✅ TEMİZLİK TAMAMLANDI!\n";
} else {
    echo "✅ SİMÜLASYON TAMAMLANDI!\n";
    echo "⚠️  Hiçbir veri silinmedi\n";
    echo "🔥 Gerçekten silmek için:\n";
    echo "   Satır 34: \$SILME_MODU = true; yap\n\n";
}

echo "⏱️  Toplam Süre: {$time} saniye\n";
echo "===========================================\n";
?>

