<?php

declare(strict_types=1);

namespace App\Http\Middleware;

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

/**
 * Gatekeeper de suscripción para el panel /admin.
 *
 * Cuando la prueba (o la suscripción) de una empresa expira, en lugar del 403 seco
 * de Filament (canAccessPanel → false), se redirige al admin a la pantalla de
 * reactivación `/suscripcion`, donde puede solicitar una suscripción.
 *
 * Va ANTES de Filament\Http\Middleware\Authenticate en authMiddleware, de modo que
 * intercepta antes del 403. Los super_admin siempre tienen acceso
 * (hasActiveSubscription() lo concede), así que nunca se redirigen. Los roles que no
 * son de panel (cobrador, etc.) siguen cayendo en el 403 de canAccessPanel.
 */
class EnsureActiveSubscription
{
    public function handle(Request $request, Closure $next): Response
    {
        $user = $request->user();

        if ($user
            && $user->hasAnyRole(['super_admin', 'admin'])
            && ! $user->hasActiveSubscription()
        ) {
            return redirect()->route('subscription.locked');
        }

        return $next($request);
    }
}
