<?php
// ============================================================
// FILE: includes/auth.php
// Fungsi autentikasi & otorisasi berbasis session
// ============================================================

/** Cek apakah user sudah login */
function isLoggedIn(): bool {
    return !empty($_SESSION['user_id']);
}

/** Cek apakah user yang login adalah admin */
function isAdmin(): bool {
    return isLoggedIn() && ($_SESSION['user_role'] ?? '') === 'admin';
}

/**
 * Paksa halaman hanya bisa diakses admin.
 * Taruh di bagian atas setiap halaman admin.
 */
function requireAdmin(): void {
    if (!isAdmin()) {
        header('Location: ' . BASE_URL . '/login.php?redirect=admin');
        exit;
    }
}

/**
 * Login user: validasi credentials, isi session.
 *
 * FIX: session_regenerate_id dipanggil dengan false (bukan true)
 * dan SEBELUM menulis ke $_SESSION.
 * Pada XAMPP/Laragon, regenerate(true) kadang menghapus session
 * yang baru saja dibuat karena race condition file session.
 *
 * @return bool true jika berhasil
 */
function loginUser(string $email, string $password): bool {
    $pdo  = db();
    $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ? LIMIT 1");
    $stmt->execute([$email]);
    $user = $stmt->fetch();

    if ($user && password_verify($password, $user['password'])) {
        // Regenerate SEBELUM tulis data, gunakan false agar file lama
        // tidak dihapus sebelum data baru selesai ditulis
        session_regenerate_id(false);

        $_SESSION['user_id']   = $user['id'];
        $_SESSION['user_nama'] = $user['nama'];
        $_SESSION['user_role'] = $user['role'];

        // Paksa tulis session ke disk sekarang
        session_write_close();

        // Buka kembali session untuk request ini
        session_start();

        return true;
    }
    return false;
}

/** Logout: hancurkan session */
function logoutUser(): void {
    $_SESSION = [];
    if (ini_get('session.use_cookies')) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params['path'], $params['domain'],
            $params['secure'], $params['httponly']
        );
    }
    session_destroy();
}