# AI Modülü Geliştirme Planı

## Genel Bakış

AI asistan modülünü admin panelinden yönetilebilir hale getirme, UI/UX modernizasyonu ve ücretsiz AI API desteği ekleme projesi.

## Mevcut Durum Analizi

### Var olan bileşenler:
- `AIController.php` - Chat, Simulation, Content Generator endpoint'leri
- `AIService.php` - Sadece OpenAI API desteği (ücretli)
- `resources/views/ai/` - Inline CSS ile yapılmış statik UI
- `AppSetting` modeli - AI ayarları için kullanılıyor (sınırlı)

### Sorunlar:
1. AI ayarları admin panelinde ayrı bir sekme olarak yok (genel Settings içinde)
2. Sadece OpenAI provider desteği var
3. UI inline CSS ile yapılmış, Tailwind kullanılmıyor
4. System prompt hardcoded
5. Ücretsiz AI API'leri (Ollama, LM Studio) desteklenmiyor

---

## Mimari Tasarım

### Veritabanı Yapısı

```mermaid
erDiagram
    AiSetting {
        bigint id PK
        string provider "openai, ollama, lmstudio, custom"
        string name "Ayar Adı"
        string api_key
        string api_url
        string model
        text system_prompt
        boolean is_active
        integer max_tokens
        float temperature
        integer max_history
        timestamp created_at
        timestamp updated_at
    }
```

### Provider Desteği

| Provider | API URL (Varsayılan) | Model Örnekleri | Ücretsiz |
|----------|---------------------|-----------------|----------|
| OpenAI | https://api.openai.com/v1 | gpt-3.5-turbo, gpt-4 | ❌ |
| Ollama | http://localhost:11434/v1 | llama2, mistral, codellama | ✅ |
| LM Studio | http://localhost:1234/v1 | Yerel modeller | ✅ |
| Custom | Kullanıcı tanımlı | Kullanıcı tanımlı | - |

### Akış Diyagramı

```mermaid
flowchart TD
    A[Kullanıcı AI Sohbet] --> B{AIController}
    B --> C{AIService}
    C --> D{AiSetting::getActive}
    D --> E{Provider Tipi}
    
    E -->|openai| F[OpenAI API]
    E -->|ollama| G[Ollama API]
    E -->|lmstudio| H[LM Studio API]
    E -->|custom| I[Custom API]
    
    F --> J[Yanıt İşle]
    G --> J
    H --> J
    I --> J
    
    J --> K[Kullanıcıya Gönder]
    
    L[Admin Panel] --> M[AISettingController]
    M --> N[AiSetting CRUD]
    N --> O[Database]
```

---

## Detaylı Görev Listesi

### 1. Veritabanı Katmanı

#### 1.1 Migration Oluştur
**Dosya:** `database/migrations/2024_03_27_000001_create_ai_settings_table.php`

```php
Schema::create('ai_settings', function (Blueprint $table) {
    $table->id();
    $table->string('provider'); // openai, ollama, lmstudio, custom
    $table->string('name'); // Ayar adı (örn: "Ollama Llama2")
    $table->string('api_key')->nullable();
    $table->string('api_url');
    $table->string('model');
    $table->text('system_prompt')->nullable();
    $table->boolean('is_active')->default(false);
    $table->integer('max_tokens')->default(1000);
    $table->decimal('temperature', 3, 1)->default(0.7);
    $table->integer('max_history')->default(10);
    $table->timestamps();
});
```

#### 1.2 Model Oluştur
**Dosya:** `app/Models/AiSetting.php`

```php
class AiSetting extends Model
{
    protected $fillable = [
        'provider', 'name', 'api_key', 'api_url', 
        'model', 'system_prompt', 'is_active', 
        'max_tokens', 'temperature', 'max_history'
    ];

    protected $casts = [
        'is_active' => 'boolean',
        'max_tokens' => 'integer',
        'temperature' => 'float',
    ];

    public static function getActive(): ?self
    public static function getForProvider(string $provider): Collection
    public function scopeActive($query)
}
```

### 2. Servis Katmanı

#### 2.1 AIService Güncelleme
**Dosya:** `app/Services/AIService.php`

Değişiklikler:
- `AppSetting` yerine `AiSetting` kullanımı
- Provider switch mantığı
- Her provider için farklı API endpoint yapılandırması
- System prompt dinamik okuma

```php
public function __construct()
{
    $setting = AiSetting::getActive();
    if ($setting) {
        $this->setting = $setting;
        $this->apiKey = $setting->api_key;
        $this->apiUrl = $setting->api_url;
        $this->model = $setting->model;
        $this->provider = $setting->provider;
    }
}

private function buildRequest(array $messages, array $options): array
{
    // Provider'a göre farklı body yapısı
    switch ($this->provider) {
        case 'ollama':
        case 'lmstudio':
            // OpenAI-compatible ama bazı farklılıklar
            return [...];
        default:
            // Standart OpenAI format
            return [...];
    }
}
```

### 3. Admin Paneli

#### 3.1 AISettingController
**Dosya:** `app/Http/Controllers/Admin/AISettingController.php`

Metodlar:
- `index()` - Tüm AI ayarlarını listele
- `create()` - Yeni ayar oluşturma formu
- `store(Request)` - Yeni ayar kaydet
- `edit($id)` - Düzenleme formu
- `update(Request, $id)` - Ayar güncelle
- `destroy($id)` - Ayar sil
- `testConnection(Request)` - API bağlantısını test et (AJAX)
- `toggleActive($id)` - Aktif ayarı değiştir

#### 3.2 Admin Views
**Dizin:** `resources/views/admin/ai/`

Dosyalar:
- `index.blade.php` - Ayarlar listesi
- `form.blade.php` - Oluşturma/Düzenleme formu
- `_partials/provider-config.blade.php` - Provider'a göre dinamik form alanları

#### 3.3 Routes
**Dosya:** `routes/web.php` (admin group içinde)

```php
Route::prefix('ai-settings')->name('ai-settings.')->group(function () {
    Route::get('/', [AISettingController::class, 'index'])->name('index');
    Route::get('/create', [AISettingController::class, 'create'])->name('create');
    Route::post('/', [AISettingController::class, 'store'])->name('store');
    Route::get('/{aiSetting}/edit', [AISettingController::class, 'edit'])->name('edit');
    Route::put('/{aiSetting}', [AISettingController::class, 'update'])->name('update');
    Route::delete('/{aiSetting}', [AISettingController::class, 'destroy'])->name('destroy');
    Route::post('/{aiSetting}/toggle', [AISettingController::class, 'toggleActive'])->name('toggle');
    Route::post('/test-connection', [AISettingController::class, 'testConnection'])->name('test');
});
```

#### 3.4 Sidebar Linki
**Dosya:** `resources/views/admin/layout.blade.php`

YÖNETİM bölümüne ekle:
```blade
<a href="{{ route('admin.ai-settings.index') }}" class="nav-item">
    <svg>...</svg>
    <span class="nav-label">AI Yönetimi</span>
</a>
```

### 4. Frontend UI Modernizasyonu

#### 4.1 AI Asistan Ana Sayfa
**Dosya:** `resources/views/ai/index.blade.php`

Değişiklikler:
- Inline CSS kaldır, Tailwind class kullan
- Responsive grid layout
- Modern kart tasarımı
- Loading states iyileştir
- Chat interface modernize

#### 4.2 Simülasyon Sayfaları
**Dosyalar:**
- `resources/views/ai/simulation.blade.php`
- `resources/views/ai/simulation-chat.blade.php`
- `resources/views/ai/simulation-result.blade.php`

Değişiklikler:
- Tailwind class kullanımı
- Progress bar ekle
- Step indicator ekle
- Sonuç sayfası modernize

#### 4.3 Content Generator
**Dosya:** `resources/views/ai/content-generator.blade.php`

Değişiklikler:
- Tailwind class kullanımı
- Real-time preview
- Copy to clipboard butonu
- Loading states

### 5. Seeder

#### 5.1 AiSettingSeeder
**Dosya:** `database/seeders/AiSettingSeeder.php`

Default kayıtlar:
- OpenAI (demo, inactive)
- Ollama (localhost:11434, inactive)
- LM Studio (localhost:1234, inactive)

---

## UI/UX Tasarım Prensipleri

### Renk Paleti
- Primary: `#3b82f6` (blue-500)
- Success: `#10b981` (emerald-500)
- Warning: `#f59e0b` (amber-500)
- Danger: `#ef4444` (red-500)

### Tipografi
- Başlıklar: `font-bold text-xl md:text-2xl`
- Body: `text-sm md:text-base text-gray-700`
- Helper text: `text-xs text-gray-500`

### Spacing
- Card padding: `p-4 md:p-6`
- Gap: `gap-4 md:gap-6`
- Section margin: `mb-6 md:mb-8`

### Responsive Breakpoints
- Mobile: `< 768px`
- Tablet: `768px - 1024px`
- Desktop: `> 1024px`

---

## Test Planı

### 1. Backend Testleri
- [ ] Migration çalışır
- [ ] Seeder default kayıtları oluşturur
- [ ] AiSetting::getActive() doğru kaydı döndürür
- [ ] AIService her provider için doğru request yapar
- [ ] Admin CRUD işlemleri çalışır

### 2. Frontend Testleri
- [ ] AI chat mesaj gönderir ve alır
- [ ] Simülasyon başlatır ve tamamlar
- [ ] Content generator içerik üretir
- [ ] Admin paneli responsive çalışır
- [ ] Provider değişimi formu günceller

### 3. Provider Testleri
- [ ] OpenAI API bağlantısı
- [ ] Ollama localhost bağlantısı
- [ ] LM Studio localhost bağlantısı
- [ ] Custom API bağlantısı

---

## Deployment Adımları

1. Migration çalıştır: `php artisan migrate`
2. Seeder çalıştır: `php artisan db:seed --class=AiSettingSeeder`
3. Cache temizle: `php artisan config:clear && php artisan cache:clear`
4. Admin panelinden AI ayarlarını yapılandır
5. Test connection ile API'leri test et

---

## Riskler ve Mitigasyon

| Risk | Olasılık | Etki | Mitigasyon |
|------|----------|------|------------|
| API değişiklikleri | Orta | Orta | Version kontrolü, fallback mekanizması |
| Localhost API erişimi | Yüksek | Düşük | Dokümantasyon, varsayılan portlar |
| Rate limiting | Orta | Orta | Retry logic, error handling |
| Model uyumsuzluğu | Düşük | Yüksek | Provider validation, test endpoint |

---

## Sonraki Adımlar

Bu plan onaylandıktan sonra:
1. Code mode'a geçiş
2. Sırayla dosyaları oluşturma
3. Test ve validation
4. Documentation update
