"""AI Lab Türkiye sentetik veri alıştırması; Clusy ajanının ürettiği kod değildir.

CSV ile aynı klasörde Python 3, pandas ve matplotlib ortamında çalıştır.
Bu örneğin sabit kontrolleri yalnız beraberindeki 12 satırlık CSV içindir.
Öğrenme için hazırlanmış sentetik veri; gerçek müşteri veya şirket kaydı içermez.
"""

# %% 1. CSV dosyasını oku
from pathlib import Path
import pandas as pd
import matplotlib.pyplot as plt

csv_path = Path('clusy-ornek-satis-20261027.csv')
if not csv_path.is_file():
    raise FileNotFoundError('CSV dosyasını bu notebook ile aynı Workspace klasörüne koy.')
df = pd.read_csv(csv_path, dtype={'siparis_id': 'string', 'urun': 'string'})
required = ['siparis_id', 'tarih', 'urun', 'adet', 'birim_fiyat_tl']
if list(df.columns) != required:
    raise ValueError('Beklenen beş sütun bulunamadı; CSV dosyasını kontrol et.')
if df['siparis_id'].isna().any() or df['siparis_id'].duplicated().any():
    raise ValueError('Sipariş kimlikleri boş veya tekrarlı; toplama geçmeden kontrol et.')
print('Ham satır sayısı:', len(df))
print('Eksik alanlar:', df.isna().sum().to_dict())

# %% 2. Eksik veya geçersiz satırları açıkça ayır
df['tarih'] = pd.to_datetime(df['tarih'], format='%Y-%m-%d', errors='coerce')
df['adet'] = pd.to_numeric(df['adet'], errors='coerce')
df['birim_fiyat_tl'] = pd.to_numeric(df['birim_fiyat_tl'], errors='coerce')
invalid = (df[['tarih', 'urun', 'adet', 'birim_fiyat_tl']].isna().any(axis=1)
           | (df['adet'] <= 0) | (df['adet'] % 1 != 0) | (df['birim_fiyat_tl'] < 0)
           | ((df['birim_fiyat_tl'] * 100).round(6) % 1 != 0))
excluded = df.loc[invalid].copy()
valid = df.loc[~invalid].copy()
print('Ayrılan siparişler:', excluded['siparis_id'].tolist())
print('Hesaplanan satır sayısı:', len(valid))

# %% 3. Para tutarlarını tam sayı kuruşla hesapla
valid['adet'] = valid['adet'].astype('int64')
valid['birim_fiyat_kurus'] = (valid['birim_fiyat_tl'] * 100).round().astype('int64')
valid['tutar_kurus'] = valid['adet'] * valid['birim_fiyat_kurus']
valid['ay'] = valid['tarih'].dt.strftime('%Y-%m')
monthly = valid.groupby('ay', sort=True)['tutar_kurus'].sum()
expected = {'2026-07': 32000, '2026-08': 49000, '2026-09': 50000}
assert len(df) == 12 and len(valid) == 11, 'Bu kontrol örnek CSV içindir.'
assert excluded['siparis_id'].tolist() == ['S008'], 'Beklenmeyen veri kalitesi sonucu.'
assert monthly.to_dict() == expected, 'Aylık toplamlar beklenen değerlerle uyuşmuyor.'
assert int(monthly.sum()) == 131000, 'Genel toplam 1.310 TL olmalı.'
for month, amount in monthly.items():
    print(f'{month}: {amount / 100:.2f} TL')
print(f'Toplam: {monthly.sum() / 100:.2f} TL')

# %% 4. Başlığı ve kapsamı açık bir grafik üret
plt.rcParams.update({'font.family': 'DejaVu Sans', 'font.size': 12})
fig, ax = plt.subplots(figsize=(9, 5))
bars = ax.bar(['Temmuz', 'Ağustos', 'Eylül'], monthly.to_numpy() / 100,
              color='#2158e8', width=0.55)
ax.set_title('Aylık hesaplanabilen sipariş tutarı', loc='left', pad=18, fontweight='bold')
ax.set_ylabel('TL')
ax.set_ylim(0, 620)
ax.set_axisbelow(True)
ax.grid(axis='y', color='#dfe7f3', linewidth=0.8)
ax.spines[['top', 'right', 'left']].set_visible(False)
ax.spines['bottom'].set_color('#dfe7f3')
ax.tick_params(axis='both', length=0)
for bar, amount in zip(bars, monthly.to_numpy() / 100):
    ax.text(bar.get_x() + bar.get_width()/2, amount+12, f'{amount:.0f} TL', ha='center')
fig.text(0.12, 0.025, 'Sentetik veri • 12 kayıttan 11’i hesaplandı; S008 ayrıldı.\nAI Lab Türkiye referans hesabı; Clusy ürün çıktısı değildir.', fontsize=10, color='#516074')
fig.tight_layout(rect=(0, 0.10, 1, 1))
fig.savefig('clusy-referans-grafik-20261027.png', dpi=150)
plt.close(fig)

# %% 5. Sonuçları dosyaya kaydet
monthly.rename('tutar_kurus').to_csv('clusy-aylik-sonuclar.csv', encoding='utf-8')
excluded['siparis_id'].to_csv('clusy-ayrilan-kayitlar.csv', index=False, encoding='utf-8')
print('Kontroller başarılı. Eksik adet sıfırla doldurulmadı; S008 ayrı raporlandı.')
