# 🚀 Kapadokya Kuralları - Hızlı Referans

## 📌 Kural Kategorileri

### 🟢 FLEXIBLE (Esnek)
```
museum, park, viewpoint, valley, historical_site, church, cave, underground_city
```
- ✅ Günde birden fazla
- ✅ Aynı tipten birden fazla

### 🟡 LIMITED (Sınırlı)
```
restaurant, cafe
```
- ✅ Günde sadece 1
- ❌ Restaurant VEYA cafe

### 🔴 EXCLUDED (Hariç)
```
hotel, accommodation, lodging
```
- ❌ Asla timeline'a eklenmez
- ✅ Sadece başlangıç noktası

### 🔵 FIXED_TIME (Sabit Saatli)
```
hot_air_balloon, hot-air-balloon
```
- ✅ Trip başına 1 kez
- ✅ Tercihen 2. gün

## 🎯 Kullanım Örnekleri

### ✅ Doğru Kullanım

```typescript
// GÜN 1
✅ Göreme Açık Hava Müzesi (museum)
✅ Zelve Açık Hava Müzesi (museum)      // FLEXIBLE: Birden fazla müze
✅ Seten Restaurant (restaurant)        // LIMITED: 1 tane
✅ Uçhisar Kalesi (viewpoint)

// GÜN 2
✅ Balon Turu (hot_air_balloon)         // FIXED_TIME: Trip başına 1
✅ Paşabağ Vadisi (valley)
✅ Dibek Restaurant (restaurant)        // LIMITED: Farklı gün, farklı restaurant
```

### ❌ Yanlış Kullanım

```typescript
// GÜN 1
✅ Göreme Açık Hava Müzesi (museum)
❌ Sultan Cave Suites (hotel)           // EXCLUDED: Asla eklenmez
✅ Seten Restaurant (restaurant)
❌ Cafe Safak (cafe)                    // LIMITED: Günde zaten restaurant var

// GÜN 2
✅ Balon Turu (hot_air_balloon)
❌ Göreme Açık Hava Müzesi (museum)     // Tekrarlama: Aynı yer 2. kez
❌ 2. Balon Turu (hot_air_balloon)      // FIXED_TIME: Trip başına 1 kez
```

## 🔍 Kontrol Fonksiyonu

### isValidForDay()
```typescript
isValidForDay(
  place: PlaceWithCoordinates,
  dayPlaces: DayPlace[],
  usedPlaceIds: Set<string>,
  rulesContext?: { balloonAdded?: boolean }
): boolean
```

**Kontrol Sırası:**
1. ✅ Aynı yer tekrar mı? → Reddet
2. ✅ EXCLUDED kategorisi mi? → Reddet
3. ✅ FIXED_TIME ve zaten eklendi mi? → Reddet
4. ✅ LIMITED ve günde zaten var mı? → Reddet
5. ✅ FLEXIBLE → İzin ver
6. ✅ UNKNOWN → İzin ver

## 📊 Kural Matrisi

| Kategori | Günde Kaç Tane | Aynı Tip | Tekrar | Örnek |
|----------|----------------|----------|--------|-------|
| FLEXIBLE | Birden fazla | ✅ | ❌ | museum, park |
| LIMITED | 1 | ❌ | ❌ | restaurant, cafe |
| EXCLUDED | 0 | ❌ | ❌ | hotel |
| FIXED_TIME | Trip'te 1 | ❌ | ❌ | balloon |

## 🛠️ Kod Konumları

### Kural Tanımları
```
/src/config/cappadocia-rules.ts
```
- `PLACE_TYPE_CATEGORIES` (Satır 174-186)
- `getPlaceCategory()` (Satır 191-197)
- `isValidForDay()` (Satır 273-314)

### Kural Uygulaması
```
/src/db/api.ts
```
- Import (Satır 894-904)
- FLEXIBLE PLACES (Satır 1027-1040)
- MIN FILL (Satır 1073-1088)

## 🧪 Test Komutları

### TypeScript Kontrolü
```bash
cd /workspace/app-9jd6q07lo4xs
npm run lint
```

### Kural Kontrolü
```bash
# Import kontrolü
grep "isValidForDay" src/db/api.ts

# Kullanım kontrolü
grep -A 5 "isValidForDay(place\|isValidForDay(p" src/db/api.ts
```

## 📈 Performans

### Zaman Karmaşıklığı
- `isValidForDay()`: O(n) - n = günlük yer sayısı (max 5)
- `getPlaceCategory()`: O(1) - Sabit zaman

### Alan Karmaşıklığı
- `usedPlaceIds`: O(m) - m = toplam yer sayısı (max 15)

## 🎓 Önemli Notlar

1. **Geriye Uyumluluk**
   - Mevcut seyahatler etkilenmez
   - Sadece yeni AUTO_SEED seyahatler

2. **Öncelik Sırası**
   - Balon → Restaurant → Flexible → Min Fill

3. **Hata Durumları**
   - Kural ihlali → Yer atlanır
   - Minimum yer sayısı → Kural esnetilmez

4. **Genişletilebilirlik**
   - Yeni kategori eklemek kolay
   - `PLACE_TYPE_CATEGORIES` güncelle
   - `isValidForDay()` otomatik çalışır

## 🔗 İlgili Dosyalar

- ✅ `CAPPADOCIA_RULES_ACTIVATION.md` - Detaylı kılavuz
- ✅ `CAPPADOCIA_RULES_BEFORE_AFTER.md` - Önce/Sonra
- ✅ `CAPPADOCIA_RULES_SUMMARY.md` - Özet
- ✅ `test-cappadocia-rules.ts` - Test senaryoları

---

**Versiyon:** 1.0  
**Tarih:** 2025  
**Durum:** ✅ Aktif
