<?php

namespace App\Services\Auth;

use App\Models\User;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;

class ApiLoginChallengeService
{
    protected function cacheKey(string $token): string
    {
        return 'api_login_challenge:'.$token;
    }

    public function create(User $user): string
    {
        $token = Str::random(64);
        Cache::put($this->cacheKey($token), [
            'user_id' => $user->id,
        ], now()->addMinutes(15));

        return $token;
    }

    public function user(string $token): ?User
    {
        $payload = Cache::get($this->cacheKey($token));
        if (! is_array($payload) || empty($payload['user_id'])) {
            return null;
        }

        return User::find($payload['user_id']);
    }

    public function forget(string $token): void
    {
        Cache::forget($this->cacheKey($token));
    }
}
