<?php
use \Firebase\JWT\JWT;

/**
 * Verification du token JWT seul, validité, signature, expiration
 *
 * @param string $token Token JWT à vérifier
 * @param string $jwtSecret Clé secrète JWT
 * @return object Payload JWT
 */
function verifyJWTtoken(string $token, string $jwtSecret) {
	try {
		return JWT::decode($token, $jwtSecret, ["HS256"]);
	} catch (\Firebase\JWT\SignatureInvalidException $e) {
		echo "Identité invalide";
		die();
	} catch (Exception $e) {
		// echo $e->getMessage();
		echo "Erreur lors de la vérification de l'identité";
		die();
	}
}

/**
 * Contacte le backend d'Asclepia pour vérifier que la session existe, que l'utilisateur existe et qu'il soit
 * bien premium
 *
 * @param string $token Token JWT de l'utilisateur à authentifier
 */
function verifyUserPremium(string $token) {
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, "https://interface.asclepia.io/auth/user");
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
	curl_setopt($curl, CURLOPT_TIMEOUT, 60);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($curl, CURLOPT_HTTPHEADER, [
		"authorization: JWT ".$_GET["jwt"],
		"accept: application/json, text/plain, */*"
	]);
	$response = curl_exec($curl);

// Vérification de la réponse
	$httpResponseCode = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
	if ($httpResponseCode === 200) {
		$userData = json_decode($response, true);
		if ($userData === NULL || !isset($userData["premium"])) {
			echo "Echec de récupération des données utilisateur";
			die();
		}
		
		// Vérification du statut premium de l'utilisateur
		if ($userData["premium"] === FALSE) {
			echo "Abonnement requis.";
			die();
		}
	} else {
		echo "Echec de l'authentification utilisateur";
		die();
	}
}