<?php
/**
 * Controller Class
 *
 * @version     1.0.$Revision:$
 * @version     SVN: $Id:$
 * @package     bplan-base/globals
 * @subpackage  Controllers
 * @author      Wassilios Meletiadis <wassilios.meletiadis@bplan-solutions.de>
 * @copyright   Copyright (C) 2025, 2026 bplan-solutions GmbH & Co. KG <https://www.bplan-solutions.de/>
 * /Δ\
 */

namespace BplanBase\Globals\Http\Controllers;


use BplanBase\Globals\Enums\UserAccessLevel;
use BplanBase\Globals\Repositories\ModuleRepository;
use Illuminate\Http\Request;




/**
 * Controller Class
 *
 * @version     1.0.0 / 2026-02-28
 * @author      Wassilios Meletiadis <wassilios.meletiadis@bplan-solutions.de>
 */
class DashboardController extends Controller
{


/* +++ TRAITS +++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */


/* +++ CLASS CONSTANTS +++ ++++++++++++++++++++++++++++++++++++++++++++++++++ */


/* +++ OBJECT MEMBERS +++ +++++++++++++++++++++++++++++++++++++++++++++++++++ */


/* +++ CLASS MEMBERS +++ ++++++++++++++++++++++++++++++++++++++++++++++++++++ */


/* +++ OBJECT METHODS +++ +++++++++++++++++++++++++++++++++++++++++++++++++++ */


    /**
     *
     * @todo        Die Logik muss angepasst werden, wenn das Admin-Modul zum Einsatz kommt.
     *              Es muss noch überlegt werden ob das Admin-Modul als "internal" markiert werden soll oder nicht.
     *              Mit internal = FALSE: Es müsste aus der Collection entfernt werden, wenn der User keine entsprechende Berechtigung (Admin-Rolle?) hat.
     *              Mit internal = TRUE:  Das Admin-Modul muss nachträglich noch ausgelesen werden, wenn der User die Berechtigung hat.
     *                                    Das wäre in jedem Fall die sicherere Variante, weil das Admin-Modul (das gar kein richtiges Modul ist), dann nicht
     *                                    versehentlich irgendwo auftauchen würde, wo es nicht auftauchen darf.
     *
     *
     * @param       Request $Request
     *
     * @return      void
     *
     * @version     1.0.0 / 2026-02-28
     * @author      Wassilios Meletiadis <wassilios.meletiadis@bplan-solutions.de>
     */
    public function __invoke(Request $Request)
    {
        $appLayout = config('globals.app-layout');

        switch ($appLayout) {
            case 'globals::layouts.module-frame':
                $User = \Registry::get('core.user');
                $withInternal = $User->hasMinAccessLevel(UserAccessLevel::SystemManager);

                $ModuleCollection = ModuleRepository::getAll(orderBy: [
                    [
                        'column' => 'internal',
                        'direction' => 'asc'
                    ],
                ], withInternal: $withInternal);

                if ($ModuleCollection->count() === 1) {
                    $routePrefix = $ModuleCollection->first()->route_prefix;

                    return redirect()->route(strtolower($routePrefix).'-dashboard');
                }
                return view('globals::module-dashboard', ['ModuleCollection' => $ModuleCollection]);

            case true:
            case 'layouts.app':
            default:
                return view('dashboard');
        }
    } // __invoke()


/* +++ CLASS METHODS +++ ++++++++++++++++++++++++++++++++++++++++++++++++++++ */


} // class DashboardController extends Controller {}
