<?php

class ACCJ_ACL_Cache {

    private $cache_prefix = 'accj_acl_';
    private $expiration = HOUR_IN_SECONDS * 1; // 1 hour

    public function get($key) {
        return get_transient($this->cache_prefix . $key);
    }

    public function set($key, $value, $expiration = null) {
        if ($expiration === null) {
            $expiration = $this->expiration;
        }
        return set_transient($this->cache_prefix . $key, $value, $expiration);
    }

    public function delete($key) {
        return delete_transient($this->cache_prefix . $key);
    }

    // متد برای پاک کردن کش کاربر خاص (مثلاً وقتی نقش‌ها تغییر می‌کنند)
    public function clear_user_cache($user_id) {
        $this->delete('user_permissions_' . $user_id);
    }

    // متد برای پاک کردن کش نقش خاص
    public function clear_role_cache($role_id) {
        $this->delete('role_permissions_' . $role_id);
    }

    // پاک کردن کل کش ACL
    public function clear_all_acl_cache() {
        // در پروژه‌های بزرگ‌تر، نیاز به مکانیزم پیچیده‌تری برای invalidation داریم
        // مثلاً با ذخیره لیست کلیدهای کش شده یا استفاده از گروه‌های کش
        // برای سادگی، فعلاً فقط کلیدهای اصلی را پاک می‌کنیم
        // این بخش نیاز به بهبود دارد تا به طور کامل همه کش‌ها را پاک کند.
        // یک راه بهتر این است که از wp_cache_set/get استفاده کنید و یک گروه کش برای ACL ایجاد کنید.
    }
}
