<?php

namespace App\Console\Commands;

use App\Services\Stats\StatAggregatorService;
use Carbon\Carbon;
use Illuminate\Console\Command;

class StatAggregateDailyCommand extends Command
{
    protected $signature = 'stat:aggregate-daily
        {--date= : 집계 대상 날짜 (YYYY-MM-DD, 기본: 전일)}
        {--domain= : 특정 도메인만 집계 (sales, finance, production)}
        {--tenant= : 특정 테넌트만 집계}';

    protected $description = '일간 통계 집계 (sam_stat DB)';

    public function handle(StatAggregatorService $aggregator): int
    {
        $date = $this->option('date')
            ? Carbon::parse($this->option('date'))
            : Carbon::yesterday();

        $domain = $this->option('domain');
        $tenantId = $this->option('tenant') ? (int) $this->option('tenant') : null;

        $this->info("📊 일간 통계 집계 시작: {$date->format('Y-m-d')}");

        if ($domain) {
            $this->info("  도메인 필터: {$domain}");
        }
        if ($tenantId) {
            $this->info("  테넌트 필터: {$tenantId}");
        }

        try {
            $result = $aggregator->aggregateDaily($date, $domain, $tenantId);

            $this->info('✅ 일간 집계 완료:');
            $this->info("  - 처리 테넌트: {$result['tenants_processed']}");
            $this->info("  - 처리 도메인: {$result['domains_processed']}");
            $this->info("  - 소요 시간: {$result['duration_ms']}ms");

            if (! empty($result['errors'])) {
                $this->warn('  ⚠️ 에러 발생: '.count($result['errors']).'건');
                foreach ($result['errors'] as $error) {
                    $this->error("    - {$error}");
                }

                return self::FAILURE;
            }

            return self::SUCCESS;
        } catch (\Throwable $e) {
            $this->error("❌ 집계 실패: {$e->getMessage()}");

            return self::FAILURE;
        }
    }
}
