<?php

namespace App\Console\Commands;

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

class StatAggregateMonthlyCommand extends Command
{
    protected $signature = 'stat:aggregate-monthly
        {--year= : 집계 대상 연도 (기본: 전월 기준)}
        {--month= : 집계 대상 월 (기본: 전월)}
        {--domain= : 특정 도메인만 집계}
        {--tenant= : 특정 테넌트만 집계}';

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

    public function handle(StatAggregatorService $aggregator): int
    {
        $lastMonth = Carbon::now()->subMonth();
        $year = $this->option('year') ? (int) $this->option('year') : $lastMonth->year;
        $month = $this->option('month') ? (int) $this->option('month') : $lastMonth->month;

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

        $this->info("📊 월간 통계 집계 시작: {$year}-".str_pad($month, 2, '0', STR_PAD_LEFT));

        try {
            $result = $aggregator->aggregateMonthly($year, $month, $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;
        }
    }
}
