<?php declare(strict_types=1);

namespace App\Services\Captcha;

use App\Dto\HttpUserData;
use App\Enums\CaptchaLogType;
use App\Models\Captcha;
use App\Models\CaptchaToken;
use App\Services\CaptchaLog\CaptchaLogHandler;
use App\Services\GenerateTokenCommand\GenerateTokenUuidCommand;

final readonly class CaptchaHandler
{
    public function __construct(
        private GenerateTokenUuidCommand $uuidCommand,
        private CaptchaLogHandler $captchaLogHandler
    ) { }

    public function handleStore(CaptchaToken $captchaToken, HttpUserData $httpUserData): Captcha
    {
        $captcha = $captchaToken->captchas()->create([
            'uuid' => $this->uuidCommand->unique($captchaToken->captchas()->getQuery(), 'uuid')
        ]);
        $this->captchaLogHandler->handleStore($captcha->id, CaptchaLogType::Created, $httpUserData);

        return $captcha;
    }
}