<?php
declare(strict_types=1);

namespace api\components\OAuth2\Entities;

use api\components\OAuth2\Storage\SessionStorage;
use League\OAuth2\Server\Entity\SessionEntity as OriginalSessionEntity;
use Webmozart\Assert\Assert;

class RefreshTokenEntity extends \League\OAuth2\Server\Entity\RefreshTokenEntity {

    private $sessionId;

    public function isExpired(): bool {
        return false;
    }

    public function getSession(): SessionEntity {
        if ($this->session instanceof SessionEntity) {
            return $this->session;
        }

        /** @var SessionStorage $sessionStorage */
        $sessionStorage = $this->server->getSessionStorage();
        Assert::isInstanceOf($sessionStorage, SessionStorage::class);

        return $sessionStorage->getById($this->sessionId);
    }

    public function getSessionId(): int {
        return $this->sessionId;
    }

    public function setSession(OriginalSessionEntity $session): self {
        parent::setSession($session);
        $this->setSessionId((int)$session->getId());

        return $this;
    }

    public function setSessionId(int $sessionId): void {
        $this->sessionId = $sessionId;
    }

}