<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Modules\KJCReport\Entities\KJCReport;
use Modules\KJCReport\Jobs\GenerateTeamWeeklyReports;
use Modules\Unit\Entities\Unit;
use Modules\Auth\Entities\User;

class AutoGenerateWeeklyReportForUnit extends Command
{
    protected $signature = 'kjc:auto-generate-weekly-report
                            {unit : Unit name to generate reports for (e.g. "Jabatan Arah RAJD")}
                            {--force : Force generation even if reports already exist}';

    protected $description = 'Auto-generate weekly KJC reports for a specific unit';

    public function handle(): int
    {
        $unitName = $this->argument('unit');

        $unit = Unit::where('name', $unitName)->first();

        if (! $unit) {
            $this->error("Unit '{$unitName}' not found.");

            return 1;
        }

        $month = strtolower(now()->format('F'));
        $week = (int) ceil(now()->day / 7);

        if (! $this->option('force')) {
            $existingReports = KJCReport::where('unit_id', $unit->id)
                ->where('report_type', 'weekly')
                ->where('report_month', $month)
                ->where('report_week', $week)
                ->exists();

            if ($existingReports) {
                $this->info("Reports for {$unitName} - {$month} week {$week} already exist. Skipping.");

                return 0;
            }
        }

        $user = User::where('unit_id', $unit->id)->first();

        GenerateTeamWeeklyReports::dispatch($unit->id, $month, $week, $user?->id);

        $this->info("✓ Queued weekly report generation for {$unitName} - {$month} week {$week}");

        return 0;
    }
}
