<?php
declare(strict_types=1);

namespace api\components\Tokens\Algorithms;

use Lcobucci\JWT\Signer;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\Signer\Key;

class HS256 implements AlgorithmInterface {

    /**
     * @var string
     */
    private $key;

    /**
     * @var Key|null
     */
    private $loadedKey;

    public function __construct(string $key) {
        $this->key = $key;
    }

    public function getSigner(): Signer {
        return new Sha256();
    }

    public function getPrivateKey(): Key {
        return $this->loadKey();
    }

    public function getPublicKey(): Key {
        return $this->loadKey();
    }

    private function loadKey(): Key {
        if ($this->loadedKey === null) {
            $this->loadedKey = new Key($this->key);
        }

        return $this->loadedKey;
    }

}