package middlewares

import (
	"log"

	"github.com/gofiber/fiber/v2"
	"github.com/sujit-baniya/fiber-boilerplate/pkg/auth"
)

// SoloAdmin restringe una ruta a usuarios administradores.
//
// Hasta ahora todo /app solo verificaba que hubiera sesión iniciada: cualquier
// usuario del panel, sin importar su rol, podía ejecutar SQL arbitrario en el
// Query Runner, crear usuarios, cambiar la contraseña de otros o reasignar
// permisos. MenuMiddleware no autoriza nada, solo arma el menú lateral.
//
// Se aplica únicamente a las operaciones sensibles (gestión de usuarios, roles,
// módulos, Query Runner y seeds) en vez de a todo el panel, para no dejar sin
// acceso a nadie que hoy esté usando las pantallas operativas normales.
func SoloAdmin(c *fiber.Ctx) error {
	user, err := auth.User(c)
	if err != nil || user == nil {
		return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
			"error":   true,
			"message": "Usuario no autenticado",
		})
	}
	if !user.IsAdmin {
		log.Printf("[AUTORIZACION] Usuario %d (%s) intentó acceder a %s sin ser administrador",
			user.ID, user.Email, c.Path())
		return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
			"error":   true,
			"message": "Necesitas permisos de administrador para esta acción",
		})
	}
	return c.Next()
}
