<?php

namespace iDServer\Internal\Utilities;


use DateTime;

/**
 * Get the current time in
 *
 * @return string
 */
function current_time(): string
{
    return date(DateTime::ATOM);
}

/**
 * Get a uniq id started with "ID_"
 *
 * @see https://stackoverflow.com/a/2040279
 *
 * @return string
 */
function get_id(): string
{
    return sprintf( 'ID_%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        // 32 bits for "time_low"
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),

        // 16 bits for "time_mid"
        mt_rand( 0, 0xffff ),

        // 16 bits for "time_hi_and_version",
        // four most significant bits holds version number 4
        mt_rand( 0, 0x0fff ) | 0x4000,

        // 16 bits, 8 bits for "clk_seq_hi_res",
        // 8 bits for "clk_seq_low",
        // two most significant bits holds zero and one for variant DCE1.1
        mt_rand( 0, 0x3fff ) | 0x8000,

        // 48 bits for "node"
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
    );
}

function validateOpenSSLKeyType($openSSLKey)
{
    if (is_string($openSSLKey)) {
        return;
    }
    if (version_compare(PHP_VERSION, '8.0.0', '<') and is_resource($openSSLKey)) {
        return;
    }
    if (version_compare(PHP_VERSION, '8.0.0', '>=')
        and is_object($openSSLKey)
        and $openSSLKey instanceof \OpenSSLAsymmetricKey) {
        return;
    }
    trigger_error('Invalid OpenSSL key type', E_USER_ERROR);
}
