package action

import tea "github.com/charmbracelet/bubbletea"

// Quit implements Action (ctrl+c)
type Quit struct{}

func (a Quit) Execute(m Model) tea.Cmd {
	return tea.Quit
}

// Quit implements Action (:)
type EnterComandMode struct{}

func (a EnterComandMode) Execute(m Model) tea.Cmd {
	m.SetMode(CommandMode)
	m.SetCommand("")
	m.SetCommandOutput("")
	m.SetCommandError(nil)
	m.SetCommandCursor(0)
	return nil
}

// Quit implements Action (v)
type EnterVisualMode struct{}

func (a EnterVisualMode) Execute(m Model) tea.Cmd {
	m.SetAnchorX(m.CursorX())
	m.SetAnchorY(m.CursorY())
	m.SetMode(VisualMode)
	return nil
}

// Quit implements Action (V)
type EnterVisualLineMode struct{}

func (a EnterVisualLineMode) Execute(m Model) tea.Cmd {
	m.SetAnchorX(m.CursorX())
	m.SetAnchorY(m.CursorY())
	m.SetMode(VisualLineMode)
	return nil
}

// Quit implements Action (ctrl+v)
type EnterVisualBlockMode struct{}

func (a EnterVisualBlockMode) Execute(m Model) tea.Cmd {
	m.SetAnchorX(m.CursorX())
	m.SetAnchorY(m.CursorY())
	m.SetMode(VisualBlockMode)
	return nil
}
