<?php

namespace kernel\services;

use Firebase\JWT\JWT;
use kernel\helpers\Debug;
use Random\RandomException;

class TokenService
{

    public static function JWT(string|\OpenSSLCertificate|\OpenSSLAsymmetricKey $key, string $alg, array $payload = []): string
    {
        return JWT::encode(
            payload: $payload,
            key: $key,
            alg: $alg
        );
    }

    /**
     * @throws RandomException
     */
    public static function random_bytes(int $ln): string
    {
        return bin2hex(random_bytes($ln));
    }


    /**
     * @throws RandomException
     */
    public static function md5(): string
    {
        return md5(microtime() . self::getSalt(10) . time());
    }

    /**
     * @throws RandomException
     */
    public static function crypt(): string
    {
        return crypt(microtime(), self::getSalt(20));
    }

    /**
     * @throws RandomException
     */
    public static function hash(string $alg): string
    {
        return hash($alg, self::getSalt(10));
    }

    /**
     * @throws RandomException
     */
    public static function getSalt(int $length): string
    {
        return bin2hex(random_bytes($length));
    }

}