<?php
/**
 * Pack IoT – auth.php
 * ปรับให้ปลอดภัยจากการประกาศซ้ำ (guarded)
 */

require_once "config.php";   // โหลดตัวแปร $ROLE, $USER_ID

if (!function_exists('require_login')) {
    function require_login() {
        if (!isset($_SESSION['uid'])) {
            header("Location: login.php");
            exit();
        }
    }
}

if (!function_exists('require_admin')) {
    function require_admin() {
        global $ROLE;
        if ($ROLE !== "admin") {
            echo "<script>alert('ต้องเป็น Admin เท่านั้น');history.back();</script>";
            exit();
        }
    }
}

if (!function_exists('require_staff_or_admin')) {
    function require_staff_or_admin() {
        global $ROLE;
        if (!in_array($ROLE, ["admin", "staff"])) {
            echo "<script>alert('ต้องเป็น Admin หรือ Staff เท่านั้น');history.back();</script>";
            exit();
        }
    }
}

if (!function_exists('allow_role')) {
    function allow_role($roles = []) {
        global $ROLE;
        if (!in_array($ROLE, $roles)) {
            echo "<script>alert('ไม่มีสิทธิ์เข้าหน้านี้');history.back();</script>";
            exit();
        }
    }
}

if (!function_exists('staff_cannot_edit_admin')) {
    function staff_cannot_edit_admin($target_user_id, $conn) {
        global $ROLE;
        if ($ROLE === "staff") {
            $q = $conn->query("SELECT role FROM users WHERE id=" . intval($target_user_id));
            if ($q && $r = $q->fetch_assoc()) {
                if ($r['role'] === "admin") {
                    echo "<script>alert('Staff ไม่มีสิทธิ์จัดการข้อมูลของ Admin');history.back();</script>";
                    exit();
                }
            }
        }
    }
}

if (!function_exists('user_only_self')) {
    function user_only_self($target_user_id) {
        global $ROLE, $USER_ID;
        if ($ROLE === "user" && $USER_ID != $target_user_id) {
            echo "<script>alert('คุณไม่มีสิทธิ์แก้ไขข้อมูลของผู้ใช้อื่น');history.back();</script>";
            exit();
        }
    }
}
?>
