<?php

/**
 * Matomo - free/libre analytics platform
 *
 * @link    https://matomo.org
 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
 */

namespace Piwik\Access;

use Piwik\Access\Role\Admin;
use Piwik\Access\Role\View;
use Piwik\Access\Role\Write;
use Piwik\Piwik;
use Exception;

class RolesProvider
{
    /**
     * @return Role[]
     */
    public function getAllRoles(): array
    {
        return array(
            new View(),
            new Write(),
            new Admin()
        );
    }

    /**
     * Returns the list of the existing Access level.
     * Useful when a given API method requests a given access Level.
     * We first check that the required access level exists.
     *
     * @return string[]
     */
    public function getAllRoleIds(): array
    {
        $ids = array();
        foreach ($this->getAllRoles() as $role) {
            $ids[] = $role->getId();
        }
        return $ids;
    }

    public function isValidRole(string $roleId): bool
    {
        $roles = $this->getAllRoleIds();

        return \in_array($roleId, $roles, true);
    }

    /**
     * @param $roleId
     * @throws Exception
     */
    public function checkValidRole(string $roleId): void
    {
        if (!$this->isValidRole($roleId)) {
            $roles = $this->getAllRoleIds();
            throw new Exception(Piwik::translate("UsersManager_ExceptionAccessValues", [implode(", ", $roles), $roleId]));
        }
    }
}
