<?php

namespace Slovocast\Controller\User;

use Psr\Http\Message\ResponseInterface as Response;
use Slovocast\Controller\Controller;
use Slovocast\Domain\Entity\User;
use Slovocast\Domain\Repository\User\UserRepositoryInterface;
use Odan\Session\SessionInterface;

class RegisterUserAction extends Controller
{
    public function __construct(
        protected UserRepositoryInterface $userRepository,
        protected SessionInterface $session
    ) { }

    public function handle(): Response
    {
        $requestData = $this->request->getParsedBody();
        $user = User::fromArray([
            'email' => $requestData['email'],
            'name' => $requestData['name'],
            'password' => $requestData['password'],
        ]);

        $success = $this->userRepository->save($user);

        if ($success) {
            return $this->render('user/success.twig');
        } else {
            $this->session
                 ->getFlash()
                 ->add('error', "Unable to register user.");
            return $this->render('user/register.twig')->withStatus(400);
        }
    }
}