# Chat Özellikleri Geliştirme Planı

## Genel Bakış

Bu plan, sohbet sistemine iki yeni özellik eklemeyi kapsar:
1. **Küfür Filtreleme Sistemi** - Türkçe küfürlerin otomatik tespiti ve yıldız (*** şeklinde) ile gizlenmesi
2. **AI Asistan Bot** - İçerik araması yapan ve yapay zeka yanıtı veren chat botu (sonuç yoksa sessiz kalır)

---

## 1. Küfür Filtreleme Sistemi

### 1.1. Amaç
- Kullanıcı mesajlarındaki Türkçe küfürleri tespit et
- Küfürleri yıldız karakterleri (*** şeklinde) ile değiştir
- Admin orijinal mesajı görebilir
- Normal kullanıcı sadece filtrelenmiş mesajı görür

### 1.2. Veritabanı Değişiklikleri

**Migration:** `add_profanity_fields_to_chat_messages.php`

```php
// chat_messages tablosuna eklenecek sütunlar:
- is_flagged (boolean, default: false)  // Küfür içeriyor mu?
- original_message (text, nullable)      // Filtrelenmemiş orijinal (admin için)
```

### 1.3. ProfanityFilter Service

**Dosya:** `app/Services/ProfanityFilter.php`

```php
class ProfanityFilter
{
    // Türkçe küfür listesi (config'den veya veritabanından)
    protected array $profanityList = [
        // ... küfür kelimeleri
    ];

    // Mesajı kontrol et
    public function containsProfanity(string $message): bool

    // Mesajı temizle (küfürleri *** ile değiştir)
    public function sanitize(string $message): string

    // Küfür tespit detaylarını döndür
    public function detect(string $message): array
}
```

### 1.4. ChatController Entegrasyonu

`sendMessage()` metodunda:
```php
// Mesaj gönderilmeden önce kontrol et ve temizle
$profanityFilter = new ProfanityFilter();
$originalMessage = $validated['message'];
$cleanMessage = $profanityFilter->sanitize($validated['message']);
$isFlagged = $originalMessage !== $cleanMessage;

// Temizlenmiş mesajı kaydet
$message = ChatMessage::create([
    'room_id' => $room->id,
    'user_id' => auth()->id(),
    'message' => $cleanMessage,
    'original_message' => $isFlagged ? $originalMessage : null,
    'is_flagged' => $isFlagged,
    'user_name' => auth()->user()->name,
]);
```

---

## 2. AI Asistan Bot

### 2.1. Amaç
- Kullanıcı sorularına otomatik yanıt ver
- Blog yazılarında, kütüphane içeriklerinde, forum konularında arama yap
- Bulunan kaynakları linklerle sun
- Yapay zeka benzeri yanıt oluştur (AI API olmadan)

### 2.2. Veritabanı Değişiklikleri

**Migration:** `add_bot_fields_to_chat_messages.php`

```php
// chat_messages tablosuna eklenecek sütunlar:
- is_bot_message (boolean, default: false)  // Bot mesajı mı?
- bot_sources (json, nullable)               // Kaynak linkleri
- bot_query (string, nullable)               // Bot'un yanıt verdiği soru
```

### 2.3. ChatBotService

**Dosya:** `app/Services/ChatBotService.php`

```php
class ChatBotService
{
    // Mesajın bot tarafından yanıtlanıp yanıtlanmayacağını kontrol et
    public function shouldRespond(string $message): bool

    // İçerik ara (Blog, Library, Forum)
    public function searchContent(string $query): array

    // Yapay zeka benzeri yanıt oluştur
    public function generateResponse(string $query, array $sources): string

    // Bot yanıtını kaydet ve döndür
    public function createBotResponse(ChatRoom $room, string $userMessage): ChatMessage
}
```

### 2.4. Arama Mantığı

**Blog Arama:**
- `blog_posts` tablosunda `title` ve `content` alanlarında LIKE araması
- `status = 'published'` ve `published_at <= NOW()` koşulları

**Kütüphane Arama:**
- `library_contents` tablosunda `title` ve `content` alanlarında arama
- `deleted_at IS NULL` koşulu

**Forum Arama:**
- `forum_topics` tablosunda `title` ve `content` alanlarında arama
- `is_locked = false` koşulu

### 2.5. Bot Tetikleme Mantığı

Bot, aşağıdaki durumlarda tetiklenir:
- Mesaj bir soru işareti (?) ile bitiyorsa
- Mesajda "nedir", "nasıl", "neden", "kim", "nerede" gibi soru kelimeleri varsa
- Mesajda "msü", "başvuru", "şartları", "sınav" gibi anahtar kelimeler varsa

### 2.6. Bot Yanıt Formatı

```
🤖 Asistan

MSÜ başvuru şartları hakkında bulduğum bilgiler:

[Yapay zeka yantı - 2-3 cümle]

📚 Kaynaklar:
• MSÜ Subay Sınavı Rehberi - [Blog Yazısı]
• MSÜ Başvuru Koşulları - [Kütüphane]
• MSÜ Deneyimleri - [Forum Konusu]
```

---

## 3. Frontend Değişiklikleri

### 3.1. Bot Mesajı Stili

**CSS (show.blade.php):**
```css
.chat-msg.bot {
    flex-direction: row;
}

.chat-msg.bot .chat-msg-bubble {
    background: linear-gradient(135deg, #0891b2, #06b6d4);
    color: white;
    border-color: transparent;
}

.chat-msg.bot .chat-msg-name {
    color: #0891b2;
}

.chat-msg.bot .chat-msg-avatar {
    background: linear-gradient(135deg, #0891b2, #06b6d4);
}
```

### 3.2. Flagged Mesaj Stili

**CSS:**
```css
.chat-msg.flagged .chat-msg-bubble {
    border-left: 3px solid #ef4444;
}

.chat-msg.flagged::after {
    content: '⚠️ Uygunsuz İçerik';
    font-size: 10px;
    color: #ef4444;
}
```

### 3.3. JavaScript Değişiklikleri

**appendMessage() fonksiyonu:**
```javascript
function appendMessage(msg) {
    // ... mevcut kod

    // Bot mesajı kontrolü
    if (msg.is_bot) {
        div.classList.add('bot');
        // Bot avatarı
        msg.avatar = '/images/bot-avatar.png';
    }

    // Flagged mesaj kontrolü
    if (msg.is_flagged && currentUserIsAdmin) {
        div.classList.add('flagged');
    }
}
```

---

## 4. Route Değişiklikleri

**web.php:**
```php
// Mevcut route'lar korunacak
// Bot yanıtı sendMessage içinde otomatik tetiklenecek
// İsteğe bağlı ayrı bir endpoint:
Route::post('/{room}/bot-sor', [ChatController::class, 'askBot'])->name('bot_ask');
```

---

## 5. Model Değişiklikleri

**ChatMessage.php:**
```php
protected $fillable = [
    // ... mevcut alanlar
    'is_flagged',
    'flag_reason',
    'original_message',
    'is_bot_message',
    'bot_sources',
    'bot_query',
];

protected $casts = [
    // ... mevcut cast'ler
    'is_flagged' => 'boolean',
    'is_bot_message' => 'boolean',
    'bot_sources' => 'array',
];
```

---

## 6. İş Akışı Diyagramları

### 6.1. Mesaj Gönderme Akışı

```mermaid
flowchart TD
    A[Kullanıcı mesaj gönderir] --> B{Profanity kontrolü}
    B -->|Küfür var| C[is_flagged = true]
    B -->|Temiz| D[is_flagged = false]
    C --> E{Bot tetikleme kontrolü}
    D --> E
    E -->|Soru var| F[ChatBotService]
    E -->|Normal mesaj| G[Mesajı kaydet]
    F --> H[İçerik ara]
    H --> I[Yanıt oluştur]
    I --> J[Bot mesajını kaydet]
    J --> K[Kullanıcıya yanıt döndür]
    G --> K
```

### 6.2. Bot Arama Akışı

```mermaid
flowchart LR
    A[Soru] --> B[Blog Arama]
    A --> C[Kütüphane Arama]
    A --> D[Forum Arama]
    B --> E[Sonuçları birleştir]
    C --> E
    D --> E
    E --> F[Yanıt formatla]
    F --> G[Bot mesajı oluştur]
```

---

## 7. Test Senaryoları

### 7.1. Küfür Filtreleme Testleri
- [ ] Normal mesaj gönderildiğinde is_flagged = false olmalı
- [ ] Küfür içeren mesaj gönderildiğinde is_flagged = true olmalı
- [ ] Admin flagged mesajları görebilmeli
- [ ] Normal kullanıcı flagged mesajları görebilmeli (işaretli olarak)

### 7.2. Bot Testleri
- [ ] Soru işareti ile biten mesajda bot yanıt vermeli
- [ ] "msü başvuru şartları" sorusuna bot yanıt vermeli
- [ ] Bot yanıtında kaynak linkleri bulunmalı
- [ ] Bot mesajı mavi renkte ve "🤖 Asistan" ile başlamalı
- [ ] Normal mesajda bot yanıt vermemeli

---

## 8. Dosya Listesi

### Oluşturulacak Dosyalar
1. `database/migrations/xxxx_add_profanity_and_bot_fields_to_chat_messages.php`
2. `app/Services/ProfanityFilter.php`
3. `app/Services/ChatBotService.php`
4. `config/profanity.php` (opsiyonel)

### Değiştirilecek Dosyalar
1. `app/Models/ChatMessage.php`
2. `app/Http/Controllers/ChatController.php`
3. `resources/views/chat/show.blade.php`
4. `routes/web.php` (opsiyonel)

---

## 9. Güvenlik Hususları

- Küfür listesi config dosyasında saklanmalı (versiyon kontrolünde görünür)
- Bot yanıtları rate limit'e tabi olmalı (spam önleme)
- Admin olmayan kullanıcılar orijinal (filtrelenmemiş) mesajı görememeli
- Bot kaynakları sadece aktif/published içeriklerden gelmeli

---

## 10. Performans İyileştirmeleri

- İçerik araması için veritabanı indeksleri eklenmeli
- Bot yanıtları cache'lenebilir (aynı soru için)
- Küfür kontrolü için regex yerine daha hızlı algoritma
