<?php

namespace App\Http\Middleware;

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

class RoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
     * @param  string $role The required role name (e.g., 'superadmin', 'admin', 'user').
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function handle(Request $request, Closure $next, string $role): Response
    {
        // 1. Pastikan pengguna sudah login
        if (!Auth::check()) {
            // Jika belum login, redirect ke halaman login
            return redirect('/login');
        }

        $user = Auth::user();
        
        // Asumsi: Anda memiliki Accessor 'role_name' di Model User Anda
        // yang mengembalikan string nama peran (misalnya 'superadmin').
        $userRole = strtolower($user->role_name ?? ''); 

        // 2. Periksa apakah peran pengguna (userRole) cocok dengan peran yang dibutuhkan ($role)
        if ($userRole !== strtolower($role)) {
            // Jika peran tidak cocok, tampilkan halaman "Akses Ditolak" (403 Forbidden)
            // Atau, Anda bisa redirect ke dashboard umum jika ingin lebih user-friendly.

            // Kita akan render halaman error sederhana (atau bisa menggunakan Inertia)
            // Jika Anda menggunakan Inertia, Anda bisa render komponen React untuk Error 403
            return response()->inertia('Error', [
                'status' => 403,
                'message' => "Akses Ditolak. Anda harus memiliki peran '{$role}' untuk mengakses halaman ini.",
            ], 403);
            
            // Alternatif Redirect (jika tanpa Inertia):
            // return abort(403, 'Unauthorized. This action requires the ' . $role . ' role.');
        }

        // 3. Jika peran cocok, lanjutkan request
        return $next($request);
    }
}