<?php

namespace App\Http\Middleware;

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

/**
 * Cek bahwa user yang login punya role admin atau super_admin.
 *
 * MENGAPA tidak pakai Spatie RoleMiddleware?
 * Spatie v6 RoleMiddleware di beberapa versi menggunakan Gate::check()
 * untuk validasi role. Gate::before() di AppServiceProvider hanya
 * mem-bypass untuk super_admin, sehingga admin biasa selalu GAGAL
 * walau punya role yang benar.
 *
 * Middleware ini menggunakan hasAnyRole() langsung — tidak lewat Gate —
 * sehingga konsisten untuk semua role admin.
 */
class EnsureAdminRole
{
    public function handle(Request $request, Closure $next, string ...$roles): Response
    {
        if (! Auth::check()) {
            return redirect()->route('admin.login');
        }

        $user = Auth::user();

        // Roles yang diizinkan: jika tidak disebutkan, default ke admin/super_admin
        $allowedRoles = empty($roles)
            ? ['super_admin', 'admin']
            : $roles;

        if (! $user->hasAnyRole($allowedRoles)) {
            abort(403, 'Anda tidak memiliki akses ke halaman ini.');
        }

        return $next($request);
    }
}
