<?php

use dokuwiki\Extension\RemotePlugin;
use dokuwiki\Remote\AccessDeniedException;

/**
 * Class remote_plugin_acl
 */
class remote_plugin_acl extends RemotePlugin
{
    /**
     * Get the list all ACL config entries
     *
     * @return array {Scope: ACL}, where ACL = dictionnary {user/group: permissions_int}
     * @throws AccessDeniedException
     */
    public function listAcls()
    {
        if (!auth_isadmin()) {
            throw new AccessDeniedException(
                'You are not allowed to access ACLs, superuser permission is required',
                114
            );
        }
        /** @var admin_plugin_acl $apa */
        $apa = plugin_load('admin', 'acl');
        $apa->initAclConfig();
        return $apa->acl;
    }

    /**
     * Add a new ACL rule to the config
     *
     * @param string $scope The page or namespace to apply the ACL to
     * @param string $user The user or group to apply the ACL to
     * @param int $level The permission level to set
     * @return bool  If adding the ACL rule was successful
     * @throws AccessDeniedException
     */
    public function addAcl($scope, $user, $level)
    {
        if (!auth_isadmin()) {
            throw new AccessDeniedException(
                'You are not allowed to access ACLs, superuser permission is required',
                114
            );
        }

        /** @var admin_plugin_acl $apa */
        $apa = plugin_load('admin', 'acl');
        return $apa->addOrUpdateACL($scope, $user, $level);
    }

    /**
     * Remove an entry from ACL config
     *
     * @param string $scope The page or namespace the ACL applied to
     * @param string $user The user or group the ACL applied to
     * @return bool If removing the ACL rule was successful
     * @throws AccessDeniedException
     */
    public function delAcl($scope, $user)
    {
        if (!auth_isadmin()) {
            throw new AccessDeniedException(
                'You are not allowed to access ACLs, superuser permission is required',
                114
            );
        }

        /** @var admin_plugin_acl $apa */
        $apa = plugin_load('admin', 'acl');
        return $apa->deleteACL($scope, $user);
    }
}