<?php

namespace App\Console\Commands;

use App\Enums\IsPaid;
use App\Models\Payroll;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Console\Command;

class GeneratePayrolls extends Command
{
    protected $signature = 'payroll:generate {--current} {--next}';

    protected $description = 'Generate payroll data for the current or next month. Default: next month.';

    public function handle(): void
    {
        $useNextMonth = ! $this->option('current');

        $targetDate = $useNextMonth ? Carbon::now()->addMonth() : Carbon::now();
        $periodMonth = $targetDate->format('Y-m');
        $periodLabel = $targetDate->translatedFormat('F Y');

        $users = User::whereHas('employee')->active()->get();

        if ($users->isEmpty()) {
            $this->warn('Tidak ada pegawai.');

            return;
        }

        $created = 0;
        foreach ($users as $user) {
            $payroll = Payroll::firstOrCreate([
                'user_id' => $user->id,
                'period_month' => $periodMonth,
            ], [
                'base_salary' => $user->employee->base_salary,
                'bonus' => 0,
                'deduction' => 0,
                'total_salary' => $user->employee->base_salary,
                'is_paid' => IsPaid::NOT_PAID,
            ]);

            if ($payroll->wasRecentlyCreated) {
                $created++;
            }
        }

        $this->info("Payroll untuk bulan {$periodLabel} berhasil digenerate. Total data baru: {$created}");
    }
}
