<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class AdminFolderAccess
{
    /**
     * Middleware per gestire l'accesso alle cartelle degli amministratori
     * basato sui ruoli e permessi dell'utente
     */
    public function handle(Request $request, Closure $next): Response
    {
        $user = auth()->user();
        
        // Se non è autenticato, nega accesso
        if (!$user) {
            abort(403, 'Accesso negato: autenticazione richiesta');
        }

        // Super-admin può accedere a tutto
        if ($user->hasRole('super-admin')) {
            return $next($request);
        }

        // Amministratore può accedere solo alle sue cartelle
        if ($user->hasRole('amministratore') && $user->amministratore) {
            $adminCode = $request->route('adminCode');
            
            // Se non c'è codice admin nella route o non corrisponde, nega
            if (!$adminCode || $adminCode !== $user->amministratore->codice_univoco) {
                abort(403, 'Accesso negato: non autorizzato per questa cartella');
            }
            
            return $next($request);
        }

        // Altri ruoli: nega accesso
        abort(403, 'Accesso negato: ruolo non autorizzato');
    }
}
