# Changelog - 2026-04-22

Bu doküman, 22 Nisan 2026 tarihinde `iddaai-fe` ve `iddaai-be` üzerinde yapılan Frekans Motoru (Conditional Frequency Engine) frontend entegrasyonunu özetler.

## 1. Frekans Motoru — Backend Recap

- `POST /coupon/frequency-coupon` endpoint'i önceki oturumda tamamlanmıştı.
- `SmartCouponService.generateFrequencyBasedCoupon()` metodu aktif ve çalışır durumda.
- `FrequencyEngineService` → raw SQL ile `matches` tablosundaki tarihsel veriyi tarayarak oran bandı bazlı sinyal üretiyor.
- Strateji: Her takımın ev/deplasman performansını, karşılaştığı oran bandına göre filtreleyip, kombine sinyal (combined_signal) hesaplıyor.

## 2. Frontend Tip Tanımları

- `iddaai-fe/src/lib/api/coupons/types.ts` güncellendi.
- Eklenen tipler:

### FrequencyCouponRequestDto
```typescript
{
  maxMatches?: number;   // 2-5 arası, varsayılan 3
  minSignal?: number;    // 0.50-0.99, kombine sinyal eşiği
  markets?: string[];    // OU1.5, OU2.5, OU3.5, BTTS, MS
}
```

### FrequencyCouponBetDto
```typescript
{
  match_id: string;
  match_name: string;
  league: string;
  market: string;
  pick: string;
  odds: number;
  home_signal: number;
  away_signal: number;
  combined_signal: number;
  home_odds_band: string;
  away_odds_band: string;
  home_match_count: number;
  away_match_count: number;
  league_profile: string;  // GOLCU | DEFANSIF | NORMAL
}
```

### FrequencyCouponRejectedDto
```typescript
{
  match_name: string;
  reason: string;
}
```

### FrequencyCouponResultDto
```typescript
{
  bets: FrequencyCouponBetDto[];
  rejected_matches: FrequencyCouponRejectedDto[];
  reasoning: string[];
  total_odds: number;
  expected_hit_rate: number;
  expected_value: number;
  ev_positive: boolean;
}
```

## 3. API Service Katmanı

- `iddaai-fe/src/lib/api/coupons/service.ts` güncellendi.
- `generateFrequencyCoupon(dto)` metodu eklendi.
- Endpoint: `POST /coupon/frequency-coupon`

## 4. React Hook

- `iddaai-fe/src/lib/api/coupons/use-hooks.ts` güncellendi.
- `useGenerateFrequencyCoupon()` TanStack Query mutation hook'u eklendi.
- `FrequencyCouponRequestDto` import edildi.

## 5. Çeviri Dosyaları (i18n)

- `messages/tr.json` ve `messages/en.json` güncellendi.
- `coupons` namespace'ine 30+ yeni anahtar eklendi:

| Anahtar | TR | EN |
|---|---|---|
| `freq-engine-title` | Frekans Motoru | Frequency Engine |
| `freq-engine-subtitle` | Takımların oran bandına göre tarihsel performansını analiz eder... | Analyzes teams' historical performance by odds band... |
| `freq-suggest` | Frekans Kuponu Oluştur | Generate Frequency Coupon |
| `freq-min-signal` | Minimum Sinyal | Minimum Signal |
| `freq-ev-label` | Beklenen Değer (EV) | Expected Value (EV) |
| `freq-hit-rate` | Tahmini İsabet | Est. Hit Rate |
| `freq-ev-positive` | +EV Pozitif | +EV Positive |
| `freq-combined-signal` | Kombine Sinyal | Combined Signal |
| `freq-league-golcu` | Golcü | High-Scoring |
| `freq-league-defansif` | Defansif | Defensive |
| `engine-mode-label` | Motor Seçimi | Engine Mode |
| `engine-mode-help` | AI: Gemini tabanlı yapay zeka tahmini. Frekans: Veritabanı tabanlı istatistiksel analiz. | AI: Gemini-based AI prediction. Frequency: Database-driven statistical analysis. |
| `freq-mode-active` | Frekans Motoru aktif | Frequency Engine active |
| `ai-mode-active` | AI Motoru aktif | AI Engine active |

## 6. FrequencyPanel Bileşeni (Yeni Dosya)

- `iddaai-fe/src/components/coupons/frequency-panel.tsx` oluşturuldu.
- Bağımsız (standalone) bileşen, kendi state ve mutation yönetimini içerir.

### Bileşen Özellikleri:
1. **Min Signal Slider** — 50%-95% arası, kombine sinyal eşiği kontrolü
2. **Max Matches Slider** — 2-5 arası, kupon boyutu kontrolü
3. **Market Filtre Badge'leri** — OU1.5, OU2.5, OU3.5, BTTS, MS (çoklu seçim)
4. **Generate Butonu** → `useGenerateFrequencyCoupon` mutation'ını tetikler
5. **Sonuç Paneli**:
   - EV / Hit Rate / Toplam Oran istatistik kartları
   - Her bahis için ev sinyali, deplasman sinyali, kombine sinyal gösterimi
   - Oran bandı bilgisi (ör. "1.30-1.50")
   - Lig profili badge'i (Golcü/Defansif/Normal)
   - Geçmiş maç sayısı gösterimi
   - Analiz detayları (reasoning listesi)
   - Elenen maçlar (rejected_matches)
6. **Kupon Store Senkronizasyonu** — Sonuç geldiğinde bahisler otomatik olarak `useCouponStore`'a eklenir

## 7. Coupon Builder Engine Toggle

- `iddaai-fe/src/components/coupons/coupon-builder-content.tsx` güncellendi.
- Değişiklikler:
  - `LuDatabase` icon import edildi
  - `FrequencyPanel` import edildi
  - `engineMode` state eklendi: `"ai" | "frequency"`
  - Sidebar'a **Motor Seçimi** toggle eklendi (Badge tabanlı)
  - `engineMode === "frequency"` olduğunda strateji/AI suggest bölümü gizlenir, yerine `FrequencyPanel` render edilir
  - `engineMode === "ai"` olduğunda mevcut AI akışı aynen korunur

### Veri Akışı:
```
Kullanıcı → "Frekans" badge'ine tıklar → FrequencyPanel açılır
  → Sinyal/market/boyut ayarı yapar → "Frekans Kuponu Oluştur" butonuna basar
  → POST /coupon/frequency-coupon { maxMatches, minSignal, markets }
  → Backend: SmartCouponService → FrequencyEngineService (raw SQL)
  → Response: FrequencyCouponResultDto
  → UI: Sinyal kartları, EV istatistikleri, reasoning render edilir
  → Bahisler otomatik olarak CouponStore'a sync edilir
```

## 8. Derleme ve Doğrulama Notları

- `node_modules` kullanıcının makinesinde yüklü olmadığı için `npm run build` çalıştırılamadı.
- Kod yapısal olarak doğru, TypeScript tipleri backend DTO'ları ile birebir eşleşiyor.
- Doğrulama için: `npm install && npm run build` çalıştırılmalı.

## 9. Açık Kalan / Sonraki Adımlar

- `npm install && npm run build` ile frontend build doğrulanmalı.
- Frekans kuponu uçtan uca test edilmeli (backend Docker ayakta iken).
- FrequencyPanel içindeki market badge'lerine `HT_OU05` ve `DC` gibi ek marketler eklenebilir.
- Frekans sonuçlarındaki `league_profile` badge renkleri dark mode için ince ayar gerektirebilir.
- Kupon geçmişinde AI vs Frekans ayrımını gösteren bir etiket eklenebilir.
