import type { HttpContext } from '@adonisjs/core/http'
import type { NextFn } from '@adonisjs/core/types/http'

/**
 * AdminMiddleware — bloque l'accès aux endpoints réservés aux admins.
 *
 * Doit être stacké APRÈS auth() (l'auth est responsable de poser ctx.auth.user).
 * Un user authentifié mais sans `is_admin` reçoit 403 ; un user non authentifié
 * a déjà reçu 401 par le middleware auth.
 */
export default class AdminMiddleware {
  async handle(ctx: HttpContext, next: NextFn) {
    const user = ctx.auth.getUserOrFail()
    if (!user.isAdmin) {
      return ctx.response.status(403).json({ error: 'admin_only' })
    }
    return next()
  }
}
