package tasks

import (
	"fmt"
	"ocl/portainer-devtool/utils"
	"os"
	"strconv"
)

type Tasker interface {
	Execute() error
	String() string
}

// ListCommandMenu iterates task items to display them // on the screen as the menu options
func ListCommandMenu(taskItems []Tasker, menuDesp string) error {
	taskItems = append(taskItems, NewExitTask())
	for {
		printMainMenu := func() {
			taskNames := []string{}
			for _, task := range taskItems {
				taskNames = append(taskNames, task.String())
			}

			utils.PrintMenu(menuDesp, taskNames)

			// utils.MenuPrint("Which repository or action do you want to operate:", `
			//  1. Portainer EE Repository
			//  2. Portainer CE Repository
			//  3. Portainer Agent Repository
			//  4. Others
			//  5. Quit`)
		}

		option := utils.SelectMenuItem(printMainMenu)

		index, err := strconv.Atoi(option)
		if err != nil {
			utils.ErrorPrint("please type the option number\n")
			continue
		}

		if index < 1 || index > len(taskItems) {
			utils.ErrorPrint(fmt.Sprintf("no such option %s, please select again\n", option))
			continue
		}

		err = taskItems[index-1].Execute()
		if err != nil {
			utils.ErrorPrint(err.Error())
			os.Exit(1)
		}
	}
}
