package permission

import (
	
	
	
	
	
)

// Creates a new permission middleware instance
func () fiber.Handler {
	return permission
}

// permission Middleware checks for if users permission is enough
func permission( *fiber.Ctx) error {
	,  := liman.GetUser(&models.User{
		ID: .Locals("user_id").(string),
	})
	if  != nil {
		return logger.FiberError(fiber.StatusInternalServerError, "error while getting the user")
	}

	if helpers.Env("LIMAN_RESTRICTED", "false") == "true" {
		return .Next()
	}

	if .Status == 1 {
		return .Next()
	}

	,  := liman.GetObjectPermissions()
	if  != nil {
		return logger.FiberError(fiber.StatusInternalServerError, "error while getting the object permissions")
	}

	if len(.FormValue("server_id")) > 0 {
		if !helpers.Contains(, .FormValue("server_id")) {
			return logger.FiberError(fiber.StatusForbidden, "you have no permission to do this")
		}
	}

	if len(.FormValue("extension_id")) > 0 {
		 := .FormValue("extension_id")
		if !helpers.CheckUUID() {
			,  := liman.GetExtension(&models.Extension{Name: })
			if  != nil {
				return 
			}

			 = .ID
		}

		if !helpers.Contains(, ) || len() < 1 {
			return logger.FiberError(fiber.StatusForbidden, "you have no permission to do this")
		}

		.Locals("extension_id", )
	}

	return .Next()
}