package interactive

import (
	"github.com/manifoldco/promptui"
	"gitlab.com/pcanilho/go-jira-cli/internal"
)

type userTop struct {
	promptui.Select
	controller     internal.Controller
	next, previous Menu
}

var useTopItems = []string{PreviousMenu, "Search by ...", "Get by username"}

const (
	searchBySelected = iota + 1
	getByUsernameSelected
)

var userTopTemplate = &promptui.SelectTemplates{
	Label:    "-------- User Menu --------",
	Active:   "→ {{ . | cyan }}",
	Inactive: "  {{ . | cyan }}",
	Selected: "→ {{ . | red | cyan }}",
}

func NewUserTopMenu(parent Menu) Menu {
	return &userTop{
		previous: parent,
		Select: promptui.Select{
			HideSelected: true,
			Templates:    userTopTemplate,
			Items:        useTopItems,
		},
	}
}

func (mut *userTop) AttachController(controller internal.Controller) {
	mut.controller = controller
}

func (mut *userTop) Render() (int, string, error) {
	i, _, _ := mut.Run()
	switch i {
	case PreviousSelected:
		mut.next = mut.previous
	case searchBySelected:
		// @TODO - userSearchByMenu
	case getByUsernameSelected:
		mut.next = NewUserPrompt(mut)
	}

	mut.next.AttachController(mut.controller)
	return mut.next.Render()
}