<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;

/**
 * Laravel ya re-consulta el usuario completo desde la BD en cada request
 * (SessionGuard::user() -> $provider->retrieveById($id)), así que un cambio
 * de rol (nivel) se sincroniza solo, sin necesidad de este middleware. Lo
 * que Laravel NO hace por defecto es cerrar la sesión si esa cuenta fue
 * desactivada después de haber iniciado sesión — eso es lo que resuelve
 * este middleware, en cada carga de página protegida.
 */
class EnsureAccountIsActive
{
    public function handle(Request $request, Closure $next): Response
    {
        $user = Auth::user();

        if ($user && ! $user->active) {
            Auth::logout();
            $request->session()->invalidate();
            $request->session()->regenerateToken();

            return redirect()->route('login')
                ->with('status', 'Tu cuenta fue desactivada. Contactá a un administrador.');
        }

        return $next($request);
    }
}
