<?php

class ACCJ_Menu_Service {

    private $acl;

    public function __construct(Accj_ACL $acl) {
        $this->acl = $acl;
        add_filter('wp_nav_menu_objects', [$this, 'filter_nav_menu_items'], 10, 2);
    }

    public function filter_nav_menu_items($items, $args) {
        $user_id = get_current_user_id();

        if (empty($user_id)) {
            return []; // اگر کاربر وارد نشده، هیچ منویی را نمایش نده
        }

        foreach ($items as $key => $item) {
            // فرض می‌کنیم که کد permission را در یک فیلد سفارشی منو ذخیره کرده‌ایم
            // مثلاً در 'acl_permission_code'
            $permission_code = get_post_meta($item->ID, '_menu_item_accj_permission_code', true);
            $action = get_post_meta($item->ID, '_menu_item_accj_permission_action', true); // مثلاً 'view'

            if (!empty($permission_code)) {
                if (!$this->acl->user_can($user_id, $permission_code, $action ? $action : 'view')) {
                    unset($items[$key]); // اگر کاربر دسترسی نداشت، آیتم منو را حذف کن
                }
            }
        }
        return $items;
    }

    // متد برای ذخیره کد permission هنگام ذخیره منو (در بک‌اند)
    public function save_menu_item_custom_fields($menu_id, $menu_item_db_id, $args) {
        if (isset($_REQUEST['menu-item-accj-permission-code'][$menu_item_db_id])) {
            $permission_code = sanitize_text_field($_REQUEST['menu-item-accj-permission-code'][$menu_item_db_id]);
            update_post_meta($menu_item_db_id, '_menu_item_accj_permission_code', $permission_code);
        }
        if (isset($_REQUEST['menu-item-accj-permission-action'][$menu_item_db_id])) {
            $action = sanitize_text_field($_REQUEST['menu-item-accj-permission-action'][$menu_item_db_id]);
            update_post_meta($menu_item_db_id, '_menu_item_accj_permission_action', $action);
        }
    }
}
