<?php

namespace App\Console\Commands;

use App\Models\Client;
use App\Services\FirstReport\FirstReportWizardService;
use Illuminate\Console\Command;

class FirstReportWizardCommand extends Command
{
    protected $signature = 'dw:first-report
        {client : Müşteri ID}
        {--from= : Başlangıç tarihi YYYY-MM-DD}
        {--to= : Bitiş tarihi YYYY-MM-DD}
        {--template= : Rapor şablonu ID}
        {--channels=* : Platform kanalları: google_ads, meta_ads, search_console, ga4}
        {--no-preview : Canlı veri önizlemeyi atla}
        {--no-sync : Snapshot senkronizasyonunu atla}
        {--no-quality : Kalite kontrolünü atla}
        {--no-ai : AI yorum üretimini atla}
        {--force-local-ai : Harici AI yerine yerel kural motoru kullan}
        {--send-test= : Test mail alıcısı}
        {--type= : daily, weekly, monthly, custom}';

    protected $description = 'Müşteri için ilk rapor akışını uçtan uca çalıştırır: önizleme, senkron, kalite, rapor, AI ve opsiyonel test maili.';

    public function handle(FirstReportWizardService $wizard): int
    {
        $client = Client::find((int) $this->argument('client'));
        if (! $client) {
            $this->error('Müşteri bulunamadı.');
            return self::FAILURE;
        }

        [$from, $to] = $wizard->normalizeRange($this->option('from'), $this->option('to'));
        $channels = $this->option('channels') ?: $wizard->dashboardPayload($client, $from, $to)['channels'];

        $this->info('İlk rapor akışı başlıyor: '.$client->company_name.' / '.$from.' - '.$to);

        $result = $wizard->runAll($client, [
            'date_from' => $from,
            'date_to' => $to,
            'report_type' => $this->option('type') ?: $wizard->reportTypeForRange($from, $to),
            'report_template_id' => $this->option('template') ? (int) $this->option('template') : null,
            'channels' => $channels,
            'run_preview' => ! $this->option('no-preview'),
            'run_sync' => ! $this->option('no-sync'),
            'run_quality' => ! $this->option('no-quality'),
            'run_report' => true,
            'run_ai' => ! $this->option('no-ai'),
            'force_local_ai' => (bool) $this->option('force-local-ai'),
            'send_test' => (bool) $this->option('send-test'),
            'test_recipient' => $this->option('send-test'),
            'include_pdf' => true,
            'include_html' => true,
        ]);

        foreach ($result['steps'] as $step => $payload) {
            $ok = ($payload['ok'] ?? true) ? 'OK' : 'KONTROL';
            $this->line(strtoupper($step).': '.$ok);
        }

        if ($result['report']) {
            $this->info('Rapor ID: '.$result['report']->id.' / Durum: '.$result['report']->status);
        }

        return $result['ok'] ? self::SUCCESS : self::FAILURE;
    }
}
