<?php
/**
 * Kullanıcı Mesaj Kelime Analizi
 * 
 * Erkek kullanıcıların yazdığı mesajları analiz eder ve en çok kullanılan kelimeleri çıkarır
 */

require_once '../config.php';

try {
    // Erkek kullanıcıların ID'lerini al
    $stmt = $db->prepare("
        SELECT user_id 
        FROM kullanicilar 
        WHERE user_bot = 0 AND user_cinsiyet = 'erkek'
    ");
    $stmt->execute();
    $maleUserIds = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (empty($maleUserIds)) {
        echo "Erkek kullanıcı bulunamadı.";
        exit;
    }
    
    // Placeholder'ları hazırla (IN clause için)
    $placeholders = str_repeat('?,', count($maleUserIds) - 1) . '?';
    
    // Bu kullanıcıların gönderdiği mesajları al
    $stmt = $db->prepare("
        SELECT icerik 
        FROM mesajlar 
        WHERE gonderen_id IN ($placeholders)
        AND icerik IS NOT NULL 
        AND icerik != ''
        ORDER BY zaman DESC
    ");
    $stmt->execute($maleUserIds);
    $messages = $stmt->fetchAll(PDO::FETCH_COLUMN);
    
    if (empty($messages)) {
        echo "Bu kullanıcıların mesajı bulunamadı.";
        exit;
    }
    
    // Tüm mesajları birleştir
    $allMessages = implode(' ', $messages);
    
    // Mesajları dosyaya kaydet
    $outputFile = __DIR__ . '/mesajlar_' . date('Y-m-d_H-i-s') . '.txt';
    file_put_contents($outputFile, $allMessages);
    
    // Detaylı analiz yap
    $analysis = performDetailedAnalysis($allMessages, $messages);
    
    // Sonuçları dosyaya kaydet
    $analysisFile = __DIR__ . '/kelime_analizi_' . date('Y-m-d_H-i-s') . '.txt';
    $analysisContent = generateDetailedReport($analysis, count($messages));
    
    file_put_contents($analysisFile, $analysisContent);
    
    // Sonuçları göster
    echo "<h2>Detaylı Kelime Analizi Tamamlandı</h2>";
    echo "<p><strong>Toplam mesaj sayısı:</strong> " . count($messages) . "</p>";
    echo "<p><strong>Toplam kelime sayısı:</strong> " . $analysis['total_words'] . "</p>";
    echo "<p><strong>Benzersiz kelime sayısı:</strong> " . count($analysis['words']) . "</p>";
    echo "<p><strong>Mesajlar dosyası:</strong> " . basename($outputFile) . "</p>";
    echo "<p><strong>Analiz dosyası:</strong> " . basename($analysisFile) . "</p>";
    
    echo "<h3>En Çok Kullanılan 20 Kelime:</h3>";
    echo "<pre>";
    $top20 = array_slice($analysis['words'], 0, 20, true);
    foreach ($top20 as $word => $count) {
        echo sprintf("%-20s: %d\n", $word, $count);
    }
    echo "</pre>";
    
    echo "<h3>En Çok Kullanılan 10 Kelime Kombinasyonu:</h3>";
    echo "<pre>";
    $top10Phrases = array_slice($analysis['phrases'], 0, 10, true);
    foreach ($top10Phrases as $phrase => $count) {
        echo sprintf("%-30s: %d\n", $phrase, $count);
    }
    echo "</pre>";
    
    echo "<h3>Kategori Analizi:</h3>";
    echo "<pre>";
    foreach ($analysis['categories'] as $category => $words) {
        echo "$category: " . implode(', ', array_slice($words, 0, 5)) . "\n";
    }
    echo "</pre>";
    
} catch (Exception $e) {
    echo "Hata: " . $e->getMessage();
}

/**
 * Detaylı analiz yap
 */
function performDetailedAnalysis(string $allMessages, array $messages): array
{
    // Metni temizle ve normalize et
    $text = mb_strtolower($allMessages, 'UTF-8');
    $text = turkishToAscii($text);
    
    // Özel karakterleri ve sayıları kaldır, sadece harfleri bırak
    $text = preg_replace('/[^a-z\s]/', ' ', $text);
    $text = preg_replace('/\s+/', ' ', $text);
    
    // Kelimelere ayır
    $words = explode(' ', trim($text));
    $words = array_filter($words, function($word) {
        return strlen($word) >= 2 && $word !== '';
    });
    
    // Kelime sayılarını hesapla
    $wordCounts = array_count_values($words);
    arsort($wordCounts);
    
    // Kelime kombinasyonları (2'li ve 3'lü)
    $phrases = analyzePhrases($messages);
    
    // Kategorilere göre analiz
    $categories = categorizeWords($wordCounts);
    
    return [
        'words' => $wordCounts,
        'phrases' => $phrases,
        'categories' => $categories,
        'total_words' => array_sum($wordCounts)
    ];
}

/**
 * Kelime kombinasyonlarını analiz et
 */
function analyzePhrases(array $messages): array
{
    $phrases = [];
    
    foreach ($messages as $message) {
        $message = mb_strtolower($message, 'UTF-8');
        $message = turkishToAscii($message);
        $message = preg_replace('/[^a-z\s]/', ' ', $message);
        $message = preg_replace('/\s+/', ' ', $message);
        
        $words = explode(' ', trim($message));
        $words = array_filter($words, function($word) {
            return strlen($word) >= 2 && $word !== '';
        });
        
        // 2'li kombinasyonlar
        for ($i = 0; $i < count($words) - 1; $i++) {
            $phrase = $words[$i] . ' ' . $words[$i + 1];
            $phrases[$phrase] = ($phrases[$phrase] ?? 0) + 1;
        }
        
        // 3'lü kombinasyonlar
        for ($i = 0; $i < count($words) - 2; $i++) {
            $phrase = $words[$i] . ' ' . $words[$i + 1] . ' ' . $words[$i + 2];
            $phrases[$phrase] = ($phrases[$phrase] ?? 0) + 1;
        }
    }
    
    arsort($phrases);
    return $phrases;
}

/**
 * Kelimeleri kategorilere ayır
 */
function categorizeWords(array $words): array
{
    $categories = [
        'selamlasma' => [],
        'soru' => [],
        'sevgi' => [],
        'olumsuz' => [],
        'sayilar' => [],
        'zaman' => [],
        'yer' => [],
        'diger' => []
    ];
    
    foreach ($words as $word => $count) {
        if (in_array($word, ['merhaba', 'selam', 'slm', 'sa', 'gunaydin', 'iyi', 'aksamlar'])) {
            $categories['selamlasma'][$word] = $count;
        } elseif (in_array($word, ['nasilsin', 'naber', 'ne', 'nerede', 'kac', 'kim', 'nasil', 'neden', 'ne', 'mi', 'mu'])) {
            $categories['soru'][$word] = $count;
        } elseif (in_array($word, ['canim', 'tatlim', 'bebegim', 'askim', 'hayatim', 'bitanem', 'seviyorum', 'sevgili', 'ask'])) {
            $categories['sevgi'][$word] = $count;
        } elseif (in_array($word, ['hayir', 'olmaz', 'yok', 'degil', 'istemiyorum', 'kizgin', 'uzgun'])) {
            $categories['olumsuz'][$word] = $count;
        } elseif (preg_match('/^\d+$/', $word)) {
            $categories['sayilar'][$word] = $count;
        } elseif (in_array($word, ['bugun', 'dun', 'yarin', 'sabah', 'aksam', 'gece', 'gun', 'hafta', 'ay', 'yil'])) {
            $categories['zaman'][$word] = $count;
        } elseif (in_array($word, ['evde', 'disarida', 'burda', 'orada', 'sehir', 'mahalle', 'ev', 'is', 'okul'])) {
            $categories['yer'][$word] = $count;
        } else {
            $categories['diger'][$word] = $count;
        }
    }
    
    // Her kategoride en çok kullanılanları al
    foreach ($categories as $category => $words) {
        arsort($words);
        $categories[$category] = array_slice($words, 0, 20, true);
    }
    
    return $categories;
}

/**
 * Detaylı rapor oluştur
 */
function generateDetailedReport(array $analysis, int $messageCount): string
{
    $content = "=== DETAYLI KELİME ANALİZİ ===\n";
    $content .= "Toplam mesaj sayısı: $messageCount\n";
    $content .= "Toplam kelime sayısı: " . $analysis['total_words'] . "\n";
    $content .= "Benzersiz kelime sayısı: " . count($analysis['words']) . "\n\n";
    
    // En çok kullanılan kelimeler
    $content .= "=== EN ÇOK KULLANILAN 100 KELİME ===\n\n";
    $top100 = array_slice($analysis['words'], 0, 100, true);
    foreach ($top100 as $word => $count) {
        $content .= "$word: $count\n";
    }
    
    // Kelime kombinasyonları
    $content .= "\n=== EN ÇOK KULLANILAN 50 KELİME KOMBİNASYONU ===\n\n";
    $top50Phrases = array_slice($analysis['phrases'], 0, 50, true);
    foreach ($top50Phrases as $phrase => $count) {
        $content .= "$phrase: $count\n";
    }
    
    // Kategori analizi
    $content .= "\n=== KATEGORİ ANALİZİ ===\n\n";
    foreach ($analysis['categories'] as $category => $words) {
        if (!empty($words)) {
            $content .= "--- $category ---\n";
            foreach ($words as $word => $count) {
                $content .= "$word: $count\n";
            }
            $content .= "\n";
        }
    }
    
    // Bot için önerilen keywords
    $content .= "=== BOT İÇİN ÖNERİLEN KEYWORDS ===\n\n";
    $suggestedKeywords = [];
    
    // Selamlaşma
    $suggestedKeywords['greeting'] = array_keys(array_slice($analysis['categories']['selamlasma'], 0, 10, true));
    
    // Soru kelimeleri
    $suggestedKeywords['questions'] = array_keys(array_slice($analysis['categories']['soru'], 0, 10, true));
    
    // Sevgi ifadeleri
    $suggestedKeywords['love'] = array_keys(array_slice($analysis['categories']['sevgi'], 0, 10, true));
    
    foreach ($suggestedKeywords as $category => $keywords) {
        $content .= "$category: " . implode(', ', $keywords) . "\n";
    }
    
    return $content;
}

/**
 * Türkçe karakterleri ASCII karakterlere çevir
 */
function turkishToAscii(string $text): string
{
    $turkish = ['ı', 'İ', 'ş', 'Ş', 'ğ', 'Ğ', 'ü', 'Ü', 'ö', 'Ö', 'ç', 'Ç'];
    $ascii = ['i', 'i', 's', 's', 'g', 'g', 'u', 'u', 'o', 'o', 'c', 'c'];
    return str_replace($turkish, $ascii, $text);
}
