# Panel Veri Yapısı Referansı (Chat Entegrasyonu İçin)

Bu dokümanda **panel sayfasında gerçekten tanımlı olan** değişkenler ve DOM yapısı listelenir. Chat ekranında veri çekerken **sadece bu yolları** kullanın; hayali veya varsayılan isim kullanmayın.

---

## 1. Backend → View (IndexController + ChartPageBuilderService)

Panel view’a şu veriler geçilir (`return view('frontend.panel.panel', $data)`):

| Değişken | Kaynak | Açıklama |
|----------|--------|----------|
| `$charts` | `$data['charts']` | Harita key → `['title' => string, 'visual' => [...], 'raw' => ...]`. Key’ler: natal, solar_return, draconic, secondary_progression_361, solar_arc, traditional, natal_transit, vb. |
| `$date` | `$data['date']` | Doğum tarihi (Y-m-d). |
| `$time` | `$data['time']` | Doğum saati (örn. 12:00). |
| `$lat` | `$data['lat']` | Enlem. |
| `$lon` | `$data['lon']` | Boylam. |
| `$target_date` | `$data['target_date']` | Transit/hedef tarih (Y-m-d). |
| `$target_time` | `$data['target_time']` | Transit/hedef saat. |
| `$sr_year` | `$data['sr_year']` | Solar Return yılı. |
| `$houseSystems` | `$data['houseSystems']` | Ev sistemi listesi (code => label). |
| `$houseSystem` | `$data['houseSystem']` | Seçili ev sistemi kodu (P, K, W, vb.). |
| `$defaultKey` | Panel içinde hesaplanır | Varsayılan harita key’i (örn. natal). `$charts` ve `$is_relationship_view` ile belirlenir. |
| `$is_relationship_view` | `$data['is_relationship_view']` | İlişki (Synastri) modu mu? |
| `$is_dual_view` | `$data['is_dual_view']` | Çoklu harita modu mu? |
| `$relationshipA`, `$relationshipB` | `$data` | İlişki modunda kişi A/B verileri. |
| `$dualA`, `$dualB` | `$data` | Dual modunda A/B verileri. |
| `$todayPlanetTable`, `$todayAsteroidTable` | `$data` | Transit “bugün” gezegen/asteroid tabloları. |

**Form (panel.blade.php):** `id="chartForm"` içindeki input’lar:

- `name="date"` → `value="{{ $date }}"`
- `name="time"` → `value="{{ $time }}"`
- `name="lat"` → `value="{{ $lat }}"`
- `name="lon"` → `value="{{ $lon }}"`
- `name="target_date"` → `id="targetDateInput"`, `value="{{ $target_date ?? date('Y-m-d') }}"`
- `name="target_time"` → `id="targetTimeInput"`, `value="{{ $target_time ?? date('H:i:s') }}"`
- `name="sr_year"` → `value="{{ $sr_year ?? date('Y') }}"`
- `name="house_system"` → `id="houseSystemSelect"`

---

## 2. Panel Blade → JavaScript (Global / DOM)

Panel sayfasında JS tarafında **gerçekten var olan** değişkenler:

| JavaScript | Nereden | Açıklama |
|------------|--------|----------|
| `window.CHARTS` | `const CHARTS = @json($chartsJs)` | Harita key → `{ title, svg, data: { planetTable, houseTable, asteroidTable, aspectGrid }, tabs }`. |
| `window.activeKey` | `let activeKey = @json($defaultKey)` | Şu anki ana harita key’i (panel.js ile güncellenir). |
| `document.getElementById('mainTitle')` | Panel DOM | Ana harita başlığı; metin `$charts[$defaultKey]['title']` ile doldurulur, panel.js ile güncellenir. |
| `document.getElementById('mainDropzone')` | Panel DOM | Ana harita alanı. **data-active-key** panel.js tarafından set edilir (`dropzone.dataset.activeKey = activeKey`). |
| `document.getElementById('chartForm')` | Panel DOM | Form; `FormData(chartForm)` ile date, time, lat, lon, target_date, target_time, house_system vb. alınır. |

**Önemli:** Aktif harita key’i için öncelik:

1. `document.getElementById('mainDropzone')?.dataset.activeKey` (DOM, anlık)
2. `window.activeKey` (panel.js ile senkron)
3. `document.getElementById('mainTitle')?.textContent` ile `window.CHARTS` içinde title eşleşen key

---

## 3. Chat Ekranında Kullanılacak Yollar

Chat’te panel verisini **sadece** aşağıdaki yollarla okuyun:

- **Aktif harita key:**  
  `document.getElementById('mainDropzone')?.dataset?.activeKey` veya `window.activeKey`
- **Aktif harita başlığı:**  
  `document.getElementById('mainTitle')?.textContent?.trim()`
- **Panel parametreleri (date, time, lat, lon, target_date, target_time):**  
  `new URLSearchParams(window.location.search)` + `new FormData(document.getElementById('chartForm'))`; URL öncelikli, eksikler formdan.
- **Harita listesi (başlık eşlemesi için):**  
  `window.CHARTS` (key → `title`, `data`).

**Tanımsız kontrol:** Bir değişken kullanmadan önce (örn. `window.CHARTS`, `mainDropzone`, `chartForm`) var mı diye kontrol edin; yoksa konsola `console.warn('Panel verisi yok: …')` yazın veya kullanıcıya sorun.

---

## 4. Backend’e Gönderilen Parametreler (Chat → AIAsistanController)

Chat’ten gönderilen body’de kullanılan isimler backend ile uyumlu olmalı:

- `message`, `conversation_history`, `chart_key`, `is_sinastri`
- Panel parametreleri: `date`, `time`, `lat`, `lon`, `city`, `timezone`, `country_code`, `target_date`, `target_time`, `sr_year`, `house_system`, `title`, `rel_*` (sinastri için)

Bu alanlar panel formu ve URL query parametreleriyle aynı isimlerde olmalı; ek hayali alan kullanmayın.
