<?php

namespace App\Console\Commands;

use App\Models\Attendance;
use App\Models\Employee;
use App\Services\System\PushNotificationService;
use App\Settings\HrSettings;
use Carbon\Carbon;
use Illuminate\Console\Command;

class SendAttendanceReminder extends Command
{
    protected $signature = 'attendance:send-reminder';

    protected $description = 'Kirim pengingat presensi ke pegawai 30 menit sebelum jam masuk';

    public function handle(PushNotificationService $pushNotificationService): int
    {
        $settings = app(HrSettings::class);
        $scheduledTime = $settings->scheduled_check_in_time;

        if ($scheduledTime === '00:00') {
            $this->info('Jam masuk kerja belum diatur. Lewatkan.');

            return self::SUCCESS;
        }

        $now = Carbon::now();
        $scheduledCheckIn = Carbon::createFromFormat('Y-m-d H:i', $now->format('Y-m-d').' '.$scheduledTime);

        $employees = Employee::query()
            ->whereHas('user', fn ($query) => $query->active())
            ->get();

        $sentCount = 0;

        foreach ($employees as $employee) {
            $alreadyCheckedIn = Attendance::query()
                ->where('employee_id', $employee->id)
                ->whereDate('attendance_date', $now->toDateString())
                ->exists();

            if ($alreadyCheckedIn) {
                continue;
            }

            $pushNotificationService->sendToUser(
                '⏰ Pengingat Presensi',
                "Jangan lupa melakukan presensi masuk sebelum pukul {$scheduledTime}.",
                $employee->user_id,
                route('admin.hr.attendances.index'),
            );

            $sentCount++;
        }

        $this->info("Pengingat presensi dikirim ke {$sentCount} pegawai.");

        return self::SUCCESS;
    }
}
