<?php

namespace App\Http\Middleware;

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

class CheckZoneSuspended
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        // Obține zona DNS din parametrii rutei
        $zone = $request->route('dnsZone') ?? $request->route('zone');

        // Dacă există o zonă și este suspendată
        if ($zone && method_exists($zone, 'isSuspended') && $zone->isSuspended()) {
            // Verifică dacă zona poate fi reactivată și utilizatorul încearcă să facă recheck
            if ($request->is('*/recheck-nameservers') && $zone->canBeReactivated()) {
                // Permite accesul la metoda de recheck
                return $next($request);
            }

            // Pentru toate celelalte operațiuni, blochează accesul
            if ($request->expectsJson()) {
                return response()->json([
                    'success' => false,
                    'message' => 'Zona este suspendată. Configurează nameserverele corect pentru a o reactiva.',
                    'suspended_at' => $zone->suspended_at,
                    'suspension_reason' => $zone->suspension_reason,
                    'can_be_reactivated' => $zone->can_be_reactivated,
                ], 403);
            }

            return redirect()->back()->with('error',
                'Zona este suspendată. ' . $zone->suspension_reason
            );
        }

        return $next($request);
    }
}
