<?php

declare(strict_types=1);

final class UserLoginPutController extends AbstractController
{
    protected string $route = '/api/v1/user/login';
    protected array $mandatoryAttributes = [
        'username',
        'password',
    ];

    public function handle(): void
    {
        parent::handle();

        if ($this->response->getStatus() !== ServerStatus::OK) {
            return;
        }

        $json = json_decode($this->requestBody);

        $session = new Session();

        if ($session->IsLoggedIn()) {
            $this->response = new ApiJsonResponse(ServerStatus::BAD_REQUEST);
            $this->response->setParameter('success', false);
            $this->response->setMessage('You are already logged in!');

            return;
        }

        if (!$session->Login($json->username, $json->password)) {
            $this->response = new ApiJsonResponse(ServerStatus::UNAUTHORIZED);
            $this->response->setParameter('success', false);
            $this->response->setMessage('Login failed!');

            return;
        }

        $this->response = new ApiJsonResponse();
    }
}