<?php

use Storage\Session;

use Taxus\{ Privilege, Taxus, PermissionGrantInterface, DefaultPermissionGrant };

use Psr\Http\Message\ServerRequestInterface;

use function DI\{ create, get, add };

return [
    Taxus::class => function ($c) {
        $taxus = new Taxus( ... $c->get('taxus.gates') );

        $list = [];

        foreach($c->get(Lean\Lean::class)->getTaxusPrivileges() as $key => $privilege) {
            foreach($privilege as $name => $description) {
                $list[] = [ new Privilege($name, $description), $key ];
            }
        }

        $taxus->add(... $list);

        return $taxus;
    },

    'taxus.gates' => add([
        get(PermissionGrantInterface::class),
    ]),

    PermissionGrantInterface::class => create(%NAMESPACE%\PrivilegeGrantAccess::class)->constructor(get(ServerRequestInterface::class), get(Session::class)),
];