package process_queue

import (
	
	
	

	
	
	
	
	
)

type InstallPackage struct {
	Queue  *models.Queue
	DB     *gorm.DB
	UserID string
}

func ( InstallPackage) () error {
	.Queue.UpdateStatus(models.StatusProcessing)

	,  := .sendPackageToRemoteServer()
	if  != nil {
		.Queue.UpdateError(.Error())
		return 
	}

	 = .installPackage()
	if  != nil {
		.Queue.UpdateError(.Error())
		return 
	}

	.Queue.UpdateStatus(models.StatusDone)

	return nil
}

func ( InstallPackage) () (string, error) {
	 := .Queue.Data["path"].(string)
	 := filepath.Base()

	,  := file.PutFileHandler(
		.UserID,
		.Queue.Data["server_id"].(string),
		"/tmp/"+,
		,
	)

	if  == nil {
		os.Remove()
	}

	return , 
}

func ( InstallPackage) ( string) error {
	,  := liman.GetServer(&models.Server{ID: .Queue.Data["server_id"].(string)})
	if  != nil {
		return 
	}

	,  := bridge.GetSession(
		.UserID,
		.ID,
		.IPAddress,
	)
	if  != nil {
		return 
	}

	,  := .Run("cat /etc/os-release | grep ^ID_LIKE | cut -d '=' -f2 | xargs")
	 := ""
	if strings.ToLower() == "debian" {
		 = "apt"
	} else {
		 = "yum"
	}

	switch  {
	case "apt":
		,  := .Run("DEBIAN_FRONTEND=noninteractive sudo -p liman-pass-sudo apt install -fyq " + )
		if  != nil {
			return 
		}
	case "yum":
		,  := .Run("sudo -p liman-pass-sudo /usr/bin/yum install -yq " + )
		if  != nil {
			return 
		}
	}
	.Run("rm -rf " + )

	return nil
}