package ui

import (
	"strings"

	"git.sr.ht/~rockorager/vaxis"
	"git.sr.ht/~rockorager/vaxis/widgets/textinput"
)

type Input struct {
	model        textinput.Model
	AutoComplete []string
	Placeholder  string
}

func complete(m *Input) (rest string) {
	if m.model.String() != "" {
		for _, comp := range m.AutoComplete {
			if strings.HasPrefix(comp, m.model.String()) {
				rest = comp[len(m.model.String()):]
				break
			}
		}
	} else {
		rest = m.Placeholder
	}
	return
}

func (m *Input) Draw(win vaxis.Window) {
	// figure out which thing to complete
	rest := complete(m)
	m.model.Draw(win)
	win.New(len(m.model.String()), 0, win.Width, win.Height).Print(vaxis.Segment{Text: rest, Style: vaxis.Style{Foreground: vaxis.IndexColor(8)}})
}

func (m *Input) Update(event vaxis.Event) {
	if key, ok := event.(vaxis.Key); ok && key.EventType == vaxis.EventPress {
		switch key.String() {
		case "Up", "Down":
			if m.model.String() != "" {
				m.model.SetContent(m.model.String() + complete(m))
			}
		}
	}
	m.model.Update(event)
}

func (m *Input) String() string {
	return m.model.String()
}