<?php

declare(strict_types=1);

namespace App\Jobs;

use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

/**
 * Queued job: index (or re-index) a single User in Meilisearch.
 * Dispatched by UserStatsService whenever stats change.
 */
class IndexUserJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public int $tries   = 3;
    public int $timeout = 30;

    public function __construct(public readonly int $userId) {}

    public function handle(): void
    {
        $user = User::with('statistics')->find($this->userId);

        if (! $user) {
            return;
        }

        if (! $user->shouldBeSearchable()) {
            $user->unsearchable();
            return;
        }

        $user->searchable();
    }
}
