<?php

declare(strict_types=1);

function startSecureSession(): void
{
    // 🎀 Evite de redemarrer une session deja active 🎀
    if (session_status() === PHP_SESSION_ACTIVE) {
        return;
    }

    // 🎀 Cookie de session HttpOnly pour limiter l'acces JS au cookie 🎀
    $secure = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off';
    session_set_cookie_params(0, '/', '', $secure, true);

    session_start();
}

function csrfToken(): string
{
    // 🎀 Genere un token CSRF unique et persistant pour la session 🎀
    if (!isset($_SESSION['csrf_token']) || !is_string($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }

    return $_SESSION['csrf_token'];
}

function verifyCsrfToken($token): bool
{
    // 🎀 Verification stricte du token CSRF envoye par le formulaire 🎀
    if (!isset($_SESSION['csrf_token']) || !is_string($_SESSION['csrf_token'])) {
        return false;
    }

    if (!is_string($token)) {
        return false;
    }

    return hash_equals($_SESSION['csrf_token'], $token);
}

function isUserLoggedIn(): bool
{
    return isset($_SESSION['user_id']) && is_int($_SESSION['user_id']);
}

function requireLogin(): void
{
    // 🎀 Redirige vers la connexion si aucune session utilisateur valide 🎀
    if (!isUserLoggedIn()) {
        header('Location: login.php');
        exit;
    }
}
