<?php
if (session_status() !== PHP_SESSION_ACTIVE) {
    session_start();
}

require_once __DIR__ . '/config.php';

function requireLogin()
{
    if (!isset($_SESSION['member_id'])) {
        header('Location: ' . BASE_URL . '/login.php');
        exit;
    }
}

function requireAdmin()
{
    global $conn;

    requireLogin();

    $memberId = (int) ($_SESSION['member_id'] ?? 0);

    if ($memberId <= 0) {
        header('Location: ' . BASE_URL . '/login.php');
        exit;
    }

    $stmt = $conn->prepare("
        SELECT role
        FROM members
        WHERE id = ?
        LIMIT 1
    ");

    if (!$stmt) {
        http_response_code(500);
        die('ไม่สามารถตรวจสอบสิทธิ์ผู้ใช้งานได้');
    }

    $stmt->bind_param('i', $memberId);
    $stmt->execute();

    $result = $stmt->get_result();
    $member = $result->fetch_assoc();

    $stmt->close();

    $role = strtolower(
        trim(
            (string) ($member['role'] ?? '')
        )
    );

    if ($role !== 'admin') {
    http_response_code(403);

    die(
        'ไม่มีสิทธิ์เข้าใช้งาน<br>' .
        'member_id ใน Session = ' . htmlspecialchars((string) $memberId) . '<br>' .
        'role ที่อ่านจากฐานข้อมูล = ' . htmlspecialchars($role)
    );
}

    /*
     * อัปเดต Session ให้ตรงกับฐานข้อมูล
     */
    $_SESSION['role'] = $role;
}

function csrfToken()
{
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }

    return $_SESSION['csrf_token'];
}

function requireValidCsrf()
{
    $submittedToken = $_POST['csrf_token'] ?? '';

    if (
        $submittedToken === '' ||
        !hash_equals(csrfToken(), $submittedToken)
    ) {
        http_response_code(403);
        die('คำขอไม่ถูกต้อง กรุณากลับไปลองใหม่อีกครั้ง');
    }
}
