<?php

namespace App\Console\Commands;

use App\Models\GeneratedReport;
use App\Services\Ai\ReportAiInsightGenerator;
use App\Services\Reports\ReportGenerator;
use Illuminate\Console\Command;

class GenerateAiInsightsCommand extends Command
{
    protected $signature = 'dw:generate-ai-insights {report? : Rapor ID} {--client= : Müşteri ID} {--latest=10 : Rapor ID verilmezse işlenecek son rapor sayısı} {--force-local : Harici AI yerine yerel kural motorunu kullan} {--regenerate-files : AI yorumlarından sonra rapor dosyalarını yeniden oluştur}';

    protected $description = 'Tamamlanmış raporlar için AI/yerel yönetici özeti, risk, fırsat ve aksiyon önerileri üretir.';

    public function handle(ReportAiInsightGenerator $insightGenerator, ReportGenerator $reportGenerator): int
    {
        $query = GeneratedReport::query()
            ->where('status', 'completed')
            ->when($this->argument('report'), fn ($query) => $query->whereKey((int) $this->argument('report')))
            ->when($this->option('client'), fn ($query) => $query->where('client_id', (int) $this->option('client')))
            ->latest();

        if (! $this->argument('report')) {
            $query->limit((int) $this->option('latest'));
        }

        $reports = $query->get();

        if ($reports->isEmpty()) {
            $this->warn('İşlenecek tamamlanmış rapor bulunamadı.');
            return self::SUCCESS;
        }

        foreach ($reports as $report) {
            $this->line('AI yorumu oluşturuluyor: #' . $report->id . ' - ' . ($report->client?->company_name ?? '-'));
            $report = $insightGenerator->generate($report, (bool) $this->option('force-local'));

            if ($report->ai_status === 'completed' && $this->option('regenerate-files')) {
                $reportGenerator->generate($report);
            }

            $this->info('Durum: ' . $report->ai_status . ' / Sağlayıcı: ' . ($report->ai_provider ?? '-'));
        }

        return self::SUCCESS;
    }
}
