package handlers

import (
	

	
	
	
	
	
	
	
)

// ExternalAPI used for running other extension functions from a different extension
func ( *fiber.Ctx) error {
	var  *models.Extension
	var  error
	if len(.FormValue("extension_id")) > 0 {
		if !helpers.CheckUUID(.FormValue("extension_id")) {
			,  = liman.GetExtension(&models.Extension{Name: .FormValue("extension_id")})
			if  != nil {
				return 
			}
		} else {
			,  = liman.GetExtension(&models.Extension{ID: .FormValue("extension_id")})
			if  != nil {
				return 
			}
		}
	} else {
		return logger.FiberError(fiber.StatusBadRequest, "extension not found")
	}

	if .Status == "0" {
		return logger.FiberError(fiber.StatusServiceUnavailable, "extension is unavailable")
	}

	 := &models.Credentials{}
	if .RequireKey == "true" {
		,  = liman.GetCredentials(
			&models.User{
				ID: .Locals("user_id").(string),
			},
			&models.Server{
				ID: .FormValue("server_id"),
			},
		)

		if  != nil || len(.Username) < 1 {
			return logger.FiberError(fiber.StatusForbidden, "you need a key to use this extension")
		}
	}

	 := helpers.GetFormData()

	 := .FormValue("token")
	if len(.FormValue("liman-token")) > 0 {
		 = .FormValue("liman-token")
	}

	,  := sandbox.GenerateCommand(
		,
		,
		&models.CommandParams{
			TargetFunction: .FormValue("lmntargetFunction"),
			User:           .Locals("user_id").(string),
			Extension:      .FormValue("extension_id"),
			Server:         .FormValue("server_id"),
			RequestData:    ,
			Token:          ,
			BaseURL:        .FormValue("lmnbaseurl", .Get("origin")),
			Locale:         .FormValue("locale", helpers.Env("APP_LANG", "tr")),
			LogID:          .Locals("log_id").(string),
		},
	)
	if  != nil {
		return 
	}

	 := linux.Execute()
	if helpers.IsJSON() {
		type  struct {
			 any `json:"message"`
			  int `json:"status"`
		}
		 := &{}

		 := json.Unmarshal([]byte(), &)
		if  != nil {
			return .Type("json").SendString()
		}

		if  != nil && . > 399 {
			return .Status(201).Type("json").SendString()
		}

		if  != nil {
			return .Status(.).Type("json").SendString()
		}

		return .Type("json").SendString()
	}

	return .SendString()
}