<?php

namespace App\Services\Reports;

class ReportSummaryBuilder
{
    public function build(array $dataset): array
    {
        $google = $dataset['google_ads']['totals'] ?? null;
        $meta = $dataset['meta_ads']['totals'] ?? null;
        $gsc = $dataset['search_console']['totals'] ?? null;
        $ga4 = $dataset['ga4']['totals'] ?? null;

        $totalAdSpend = (float) ($google['cost'] ?? 0) + (float) ($meta['spend'] ?? 0);
        $totalAdClicks = (int) ($google['clicks'] ?? 0) + (int) ($meta['clicks'] ?? 0);
        $totalAdImpressions = (int) ($google['impressions'] ?? 0) + (int) ($meta['impressions'] ?? 0);
        $totalConversions = (float) ($google['conversions'] ?? 0) + (float) ($meta['conversions'] ?? 0) + (float) ($ga4['conversions'] ?? 0);

        return [
            'overview' => [
                'total_ad_spend' => round($totalAdSpend, 2),
                'total_ad_clicks' => $totalAdClicks,
                'total_ad_impressions' => $totalAdImpressions,
                'total_conversions' => round($totalConversions, 2),
                'average_cpc' => $totalAdClicks > 0 ? round($totalAdSpend / $totalAdClicks, 2) : 0,
                'ad_ctr' => $totalAdImpressions > 0 ? round(($totalAdClicks / $totalAdImpressions) * 100, 2) : 0,
                'organic_clicks' => (int) ($gsc['clicks'] ?? 0),
                'organic_impressions' => (int) ($gsc['impressions'] ?? 0),
                'ga4_sessions' => (int) ($ga4['sessions'] ?? 0),
            ],
            'channel_totals' => [
                'google_ads' => $google,
                'meta_ads' => $meta,
                'search_console' => $gsc,
                'ga4' => $ga4,
            ],
            'notes' => $this->notes($google, $meta, $gsc, $ga4),
        ];
    }

    /**
     * @return array<int, string>
     */
    private function notes(?array $google, ?array $meta, ?array $gsc, ?array $ga4): array
    {
        $notes = [];

        if ($google && ($google['cost'] ?? 0) > 0 && ($google['conversions'] ?? 0) <= 0) {
            $notes[] = 'Google Ads tarafında harcama var fakat seçilen tarih aralığında dönüşüm görünmüyor.';
        }

        if ($meta && ($meta['spend'] ?? 0) > 0 && ($meta['leads'] ?? 0) <= 0 && ($meta['conversions'] ?? 0) <= 0) {
            $notes[] = 'Meta Ads tarafında harcama var fakat lead/dönüşüm verisi zayıf görünüyor.';
        }

        if ($gsc && ($gsc['impressions'] ?? 0) > 0 && ($gsc['ctr'] ?? 0) < 1) {
            $notes[] = 'Search Console tarafında gösterim var ama CTR düşük. Başlık ve meta açıklama fırsatları incelenmeli.';
        }

        if ($ga4 && ($ga4['sessions'] ?? 0) > 0 && ($ga4['conversions'] ?? 0) <= 0) {
            $notes[] = 'GA4 tarafında trafik var fakat dönüşüm kaydı görünmüyor. Event/conversion kurulumu kontrol edilmeli.';
        }

        if ($notes === []) {
            $notes[] = 'Seçilen tarih aralığı için kritik bir otomatik uyarı üretilmedi. Detay tabloları kampanya ve kanal bazında incelenebilir.';
        }

        return $notes;
    }
}
