package main

import "github.com/charmbracelet/bubbles/key"

type keyMap struct {
	Up            key.Binding
	Down          key.Binding
	Priority      key.Binding
	ClearPriority key.Binding
	Help          key.Binding
	SaveQuit      key.Binding
	Quit          key.Binding
	Check         key.Binding
	Clean         key.Binding
	Add           key.Binding
	Sort          key.Binding
}

// ShortHelp returns keybindings to be shown in the mini help view. It's part
// of the key.Map interface.
func (k keyMap) ShortHelp() []key.Binding {
	return []key.Binding{k.Check, k.Add, k.Sort, k.SaveQuit, k.Help}
}

// FullHelp returns keybindings for the expanded help view. It's part of the
// key.Map interface.
func (k keyMap) FullHelp() [][]key.Binding {
	return [][]key.Binding{
		{k.Check, k.Priority, k.Up},
		{k.Add, k.ClearPriority, k.Clean, k.Down},
		{k.Sort, k.SaveQuit, k.Quit},
	}
}

var keys = keyMap{
	Up: key.NewBinding(
		key.WithKeys("up", "k"),
		key.WithHelp("↑/k", "Move up"),
	),
	Down: key.NewBinding(
		key.WithKeys("down", "j"),
		key.WithHelp("↓/j", "Move down"),
	),
	Priority: key.NewBinding(
		key.WithKeys("a", "b", "c", "d"),
		key.WithHelp("a|b|c", "Set priority"),
	),
	ClearPriority: key.NewBinding(
		key.WithKeys("z"),
		key.WithHelp("z", "Clear priority"),
	),
	Add: key.NewBinding(
		key.WithKeys("A", "+"),
		key.WithHelp("A|+", "Add new task"),
	),
	Sort: key.NewBinding(
		key.WithKeys("s"),
		key.WithHelp("s", "Sort tasks"),
	),
	Help: key.NewBinding(
		key.WithKeys("?"),
		key.WithHelp("?", "More help"),
	),
	Check: key.NewBinding(
		key.WithKeys(" ", "enter"),
		key.WithHelp("space", "Check task"),
	),
	Clean: key.NewBinding(
		key.WithKeys("u"),
		key.WithHelp("u", "Clean completed tasks"),
	),
	SaveQuit: key.NewBinding(
		key.WithKeys("q", "esc"),
		key.WithHelp("q", "Save & quit"),
	),
	Quit: key.NewBinding(
		key.WithKeys("ctrl+c"),
		key.WithHelp("ctrl+c", "Cancel & quit"),
	),
}