package middleware

import (
	"strings"
	"system-altrak/pkg/utils"

	"github.com/gofiber/fiber/v2"
)

// RoleMiddleware membatasi akses berdasarkan peran pengguna
func RoleMiddleware(allowedRoles ...string) fiber.Handler {
	return func(c *fiber.Ctx) error {
		userRole, ok := c.Locals("role").(string)
		if !ok || userRole == "" {
			return utils.ErrorResponse(c, fiber.StatusUnauthorized, "Autentikasi diperlukan")
		}
		userRole = strings.ToLower(strings.TrimSpace(userRole))

		isAllowed := false
		for _, role := range allowedRoles {
			if userRole == strings.ToLower(strings.TrimSpace(role)) {
				isAllowed = true
				break
			}
		}

		// Superadmin selalu diperbolehkan (seperti permintaan pengguna)
		if userRole == "superadmin" {
			isAllowed = true
		}

		if !isAllowed {
			return utils.ErrorResponse(c, fiber.StatusForbidden, "Anda tidak memiliki izin untuk akses fitur ini")
		}

		return c.Next()
	}
}
