<?php

namespace App\Console\Commands;

use App\Services\Quality\DataQualityService;
use Illuminate\Console\Command;

class DataQualityCommand extends Command
{
    protected $signature = 'dw:data-quality {connection? : Platform connection ID} {--client=} {--platform=} {--from=} {--to=} {--save}';

    protected $description = 'Snapshot verileri için kalite, tarih boşluğu ve rapora hazır olma kontrolü yapar.';

    public function handle(DataQualityService $quality): int
    {
        $from = $this->option('from') ?: now()->subDays(7)->toDateString();
        $to = $this->option('to') ?: now()->subDay()->toDateString();

        $report = $quality->analyze(
            $this->option('client') ? (int) $this->option('client') : null,
            $this->option('platform') ?: null,
            $this->argument('connection') ? (int) $this->argument('connection') : null,
            $from,
            $to,
            (bool) $this->option('save')
        );

        $summary = $report['summary'];
        $this->info('DW Ads Reporter veri kalite kontrolü');
        $this->line('Tarih: '.$report['from'].' / '.$report['to'].' · Beklenen gün: '.$report['expected_days']);
        $this->newLine();
        $this->table(['Bağlantı', 'Hazır', 'Kontrol', 'Sorun', 'Satır', 'Eksik Gün', 'Ortalama Skor'], [[
            $summary['connections'],
            $summary['ok'],
            $summary['warning'],
            $summary['danger'],
            $summary['rows'],
            $summary['missing_days'],
            $summary['average_score'],
        ]]);

        $rows = collect($report['items'])->map(fn ($item) => [
            '#'.$item['connection_id'],
            $item['client_name'],
            $item['platform_label'],
            $item['connection_name'],
            $item['status_label'],
            $item['score'].'/100',
            $item['total_rows'],
            $item['missing_days_total'],
            $item['latest_snapshot_date'] ?: '-',
        ])->all();

        if (! empty($rows)) {
            $this->table(['ID', 'Müşteri', 'Platform', 'Bağlantı', 'Durum', 'Skor', 'Satır', 'Eksik Gün', 'Son Tarih'], $rows);
        } else {
            $this->warn('Filtreye uygun bağlantı bulunamadı.');
        }

        return ($summary['danger'] ?? 0) > 0 ? self::FAILURE : self::SUCCESS;
    }
}
