<?php

namespace App\Http\Middleware;

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

/**
 * Membatasi akses route hanya untuk user pada grup tertentu (RPD FR-AUT-07, BR-10).
 *
 * Daftarkan sebagai alias `group:admin` / `group:admin,members` di bootstrap/app.php.
 * User tanpa akses diarahkan ke dashboard dengan pesan toast.
 */
class EnsureUserBelongsToGroup
{
    /**
     * @param  Closure(Request): (Response)  $next
     * @param  string  ...$groups  nama grup yang diizinkan
     */
    public function handle(Request $request, Closure $next, string ...$groups): Response
    {
        $user = $request->user();

        if (! $user || ! $user->inGroup($groups)) {
            if ($request->expectsJson() || $request->is('api/*')) {
                return response()->json(['message' => 'Forbidden.'], 403);
            }

            return redirect()
                ->route('dashboard')
                ->with('error', 'Anda tidak memiliki hak akses ke halaman tersebut.');
        }

        return $next($request);
    }
}
