<?php

use Taxus\Privilege;

use function DI\autowire, DI\create, DI\get;

$dir = getenv("META_PATH") . "/definitions";

return array_merge(
    Lean\Lean::autoloadDefinitionsFromComposerExtra(),

    [
        '%APPKEY%' => [
            'picea' => [
                'context' => "%ESCAPED_NAMESPACE%\\View",
                'asset' => [],
                'extensions' => [],
            ],

            'ulmus' => [
                'entities' => [ '%ESCAPED_NAMESPACE%\\Entity' => getenv("PROJECT_PATH") . '/src/Entity/' ],
            ],

            'routes' => [
                '%ESCAPED_NAMESPACE%\\Controller' => getenv("PROJECT_PATH") . '/src/Controller/',
            ],

            'events' => [
                '%ESCAPED_NAMESPACE%\\Controller' => implode(DIRECTORY_SEPARATOR, [ getenv("PROJECT_PATH"), 'src', 'Controller', '' ]),
            ],

            'cronard' => [
                '%ESCAPED_NAMESPACE%\\Controller' => implode(DIRECTORY_SEPARATOR, [ getenv("PROJECT_PATH"), 'src', 'Controller', '' ]),
            ],

            'cli' => [
                '%ESCAPED_NAMESPACE%\\Controller' => implode(DIRECTORY_SEPARATOR, [ getenv("PROJECT_PATH"), 'src', 'Controller', '' ]),
            ],

            'taxus' => [
                [ new Privilege("dev", "Is a developper of this application."), "is_dev" ],
                [ new Privilege("admin", "Can manage mostly everything from this application."), "is_admin" ],
                [ new Privilege("user", "Is an authenticated user."), "is_user" ],
                [ new Privilege("anonymous", "Is an anonymous (unauthenticated) user."), "is_anonymous" ],
            ]
        ],

        'app.middlewares' => [],
    ],

    require("$dir/auth.php"),
    require("$dir/storage.php"),
    require("$dir/security.php"),
    require("$dir/env/" . getenv('APP_ENV') . ".php"),
    [
        'config' => function () {
            return array_merge_recursive(
                Lean\Lean::autoloadConfigFromComposerExtra(),
                require(getenv("META_PATH")."/config.php")
            );
        }
    ]
);