<?php
// api/middleware.php

// Memulai session jika belum dimulai
if (session_status() === PHP_SESSION_NONE) {
    // Pastikan session cookie aman dan hanya terakses lewat HTTP (mencegah XSS hijack)
    ini_set('session.cookie_httponly', 1);
    session_start();
}

/**
 * Middleware untuk memvalidasi user yang login dan mencocokkan perannya (RBAC).
 * Jika user belum login, akan mengembalikan 401 Unauthorized.
 * Jika role user tidak ada dalam daftar role yang diizinkan, mengembalikan 403 Forbidden.
 * 
 * @param array $allowedRoles Daftar role yang diizinkan (contoh: ['admin', 'petugas'])
 * @return array Data user yang saat ini sedang login dari Session
 */
function requireAuth(array $allowedRoles = []): array
{
    // Cek apakah ada data user di Session
    if (!isset($_SESSION['user']) || !is_array($_SESSION['user'])) {
        http_response_code(401);
        echo json_encode([
            'success' => false,
            'message' => 'Unauthorized: Silakan login terlebih dahulu untuk mengakses fitur ini.'
        ]);
        exit;
    }

    $user = $_SESSION['user'];

    // Cek kecocokan role (RBAC) jika list allowedRoles tidak kosong
    if (!empty($allowedRoles) && !in_array($user['role'], $allowedRoles)) {
        http_response_code(403);
        echo json_encode([
            'success' => false,
            'message' => 'Forbidden: Peran Anda (' . $user['role'] . ') tidak memiliki hak akses ke fitur ini.'
        ]);
        exit;
    }

    return $user;
}

/**
 * Middleware Opsional untuk mendukung Guest Mode.
 * Jika user login, akan mengembalikan data user.
 * Jika belum login, akan mengembalikan null (sebagai Guest) dan proses tetap berlanjut.
 * 
 * @return array|null Data user jika login, atau null jika guest
 */
function optionalAuth(): ?array
{
    if (isset($_SESSION['user']) && is_array($_SESSION['user'])) {
        return $_SESSION['user'];
    }
    return null;
}
