<?php

namespace App\Services\Ai;

class LocalReportInsightGenerator
{
    public function generate(array $dataset, array $summary): ReportInsightResult
    {
        $overview = $summary['overview'] ?? [];
        $notes = $summary['notes'] ?? [];

        $totalSpend = (float) ($overview['total_ad_spend'] ?? 0);
        $totalConversions = (float) ($overview['total_conversions'] ?? 0);
        $organicClicks = (int) ($overview['organic_clicks'] ?? 0);
        $sessions = (int) ($overview['ga4_sessions'] ?? 0);
        $averageCpc = (float) ($overview['average_cpc'] ?? 0);
        $adCtr = (float) ($overview['ad_ctr'] ?? 0);

        $risks = [];
        $opportunities = [];
        $actions = [];

        if ($totalSpend > 0 && $totalConversions <= 0) {
            $risks[] = 'Reklam harcaması oluşmasına rağmen seçilen tarih aralığında dönüşüm görünmüyor. Dönüşüm kurulumu, hedefleme ve kampanya bazlı harcama dağılımı kontrol edilmeli.';
            $actions[] = 'Google Ads ve Meta Ads tarafında dönüşüm event/tag kurulumunu kontrol et; harcama yapan ancak dönüşüm üretmeyen kampanyaları ayrı listele.';
        }

        if ($totalSpend > 0 && $totalConversions > 0) {
            $costPerConversion = $totalSpend / $totalConversions;
            $opportunities[] = 'Toplam dönüşüm maliyeti yaklaşık ' . number_format($costPerConversion, 2, ',', '.') . ' seviyesinde. Kampanya bazında daha düşük maliyetli kaynaklar ölçeklenebilir.';
            $actions[] = 'Dönüşüm maliyeti düşük kampanyaları bütçe artışı için, maliyeti yüksek kampanyaları ise optimizasyon için etiketle.';
        }

        if ($adCtr > 0 && $adCtr < 1) {
            $risks[] = 'Reklam CTR değeri düşük görünüyor. Reklam metni/kreatif ve hedef kitle uyumu zayıflamış olabilir.';
            $actions[] = 'CTR düşük kampanyalar için yeni başlık, açıklama, görsel/video ve hedef kitle testleri planla.';
        }

        if ($averageCpc > 0) {
            $opportunities[] = 'Ortalama CPC ' . number_format($averageCpc, 2, ',', '.') . ' seviyesinde. Anahtar kelime ve placement bazlı maliyet farkları incelenebilir.';
        }

        $gsc = $dataset['search_console']['totals'] ?? [];
        if (! empty($gsc)) {
            $gscCtr = (float) (($gsc['ctr'] ?? 0) * 100);
            if (($gsc['impressions'] ?? 0) > 0 && $gscCtr < 1.5) {
                $opportunities[] = 'Search Console tarafında gösterim var fakat CTR düşük. Başlık/meta açıklama iyileştirmesiyle organik tıklama artırılabilir.';
                $actions[] = 'Gösterimi yüksek, CTR düşük sorgu ve sayfalar için başlık/meta açıklama revizyon listesi çıkar.';
            }
            if ($organicClicks > 0) {
                $opportunities[] = 'Organik tarafta ' . number_format($organicClicks, 0, ',', '.') . ' tıklama oluşmuş. Reklam verileriyle birlikte organik sayfa performansı çapraz değerlendirilebilir.';
            }
        }

        if ($sessions > 0 && $totalConversions <= 0) {
            $risks[] = 'GA4 tarafında oturum verisi var ancak dönüşüm düşük veya görünmüyor. Conversion event tanımları ve form/satın alma akışı kontrol edilmeli.';
            $actions[] = 'GA4 conversion events, form submit, purchase/lead event ve thank-you page ölçümlerini test et.';
        }

        foreach ($notes as $note) {
            if (count($risks) < 5) {
                $risks[] = $note;
            }
        }

        if ($risks === []) {
            $risks[] = 'Seçilen tarih aralığında kritik seviyede otomatik risk tespit edilmedi. Kanal bazlı detay tabloları düzenli izlenmeli.';
        }

        if ($opportunities === []) {
            $opportunities[] = 'Rapor verileri kampanya, kanal ve organik trafik kırılımlarında düzenli izlenerek bütçe optimizasyonu için kullanılabilir.';
        }

        if ($actions === []) {
            $actions[] = 'En çok harcama yapan kampanyaları, dönüşüm üreten kaynakları ve düşük CTR alan SEO sayfalarını haftalık kontrol listesine ekle.';
        }

        $executiveSummary = 'Seçilen dönemde toplam reklam harcaması ' . number_format($totalSpend, 2, ',', '.') . ', toplam dönüşüm ' . number_format($totalConversions, 2, ',', '.') . ', organik tıklama ise ' . number_format($organicClicks, 0, ',', '.') . ' olarak görünüyor. Rapor; reklam maliyeti, dönüşüm verimi, organik görünürlük ve site içi trafik açısından birlikte değerlendirilmelidir.';

        return new ReportInsightResult(
            provider: 'local_rules',
            executiveSummary: $executiveSummary,
            customerNote: 'Bu özet, rapordaki sayısal verilerin sadeleştirilmiş yorumudur. Detaylı aksiyonlar kampanya ve kanal kırılımlarına göre uygulanmalıdır.',
            technicalNote: 'Yerel kural motoru ile üretildi. AI API ayarı etkinleştirilirse aynı veri seti üzerinden daha doğal ve kapsamlı yorum üretilebilir.',
            risks: array_slice(array_values(array_unique($risks)), 0, 6),
            opportunities: array_slice(array_values(array_unique($opportunities)), 0, 6),
            actions: array_slice(array_values(array_unique($actions)), 0, 8),
            rawResponse: null,
        );
    }
}
