<?php

namespace App\Http\Middleware;

use App\Enums\UserRole;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class RoleMiddleware
{
    public function handle(Request $request, Closure $next, string ...$roles): Response
    {
        if (!auth()->check()) {
            return redirect()->route('login');
        }

        $user = auth()->user();

        // Super Admin hat immer Zugang
        if ($user->isSuperAdmin()) {
            return $next($request);
        }

        // Prüfe ob User mindestens eine der erlaubten Rollen hat (mit Hierarchie)
        if (!empty($roles)) {
            $hasAccess = collect($roles)->some(
                fn(string $role) => $user->hasAtLeastRole($role)
            );

            if (!$hasAccess) {
                abort(403, 'Keine Berechtigung.');
            }
        }

        return $next($request);
    }
}
