package events

import (
	"log"

	tea "github.com/charmbracelet/bubbletea"
	"lmika.dev/cmd/dynamo-browse/internal/dynamo-browse/services"
)

func Error(err error) tea.Msg {
	log.Println(err)
	return ErrorMsg(err)
}

func SetStatus(msg string) tea.Cmd {
	return func() tea.Msg {
		return StatusMsg(msg)
	}
}

func SetTeaMessage(event tea.Msg) tea.Cmd {
	return func() tea.Msg {
		return event
	}
}

func PromptForInput(prompt string, history services.HistoryProvider, onDone func(value string) tea.Msg) tea.Msg {
	return PromptForInputMsg{
		Prompt:  prompt,
		History: history,
		OnDone:  onDone,
	}
}

func PromptForKey(prompt string, onDone func(key string) tea.Msg) tea.Msg {
	return PromptForKeyMsg{
		Prompt: prompt,
		OnDone: onDone,
	}
}

func Confirm(prompt string, onResult func(yes bool) tea.Msg) tea.Msg {
	return PromptForInputMsg{
		Prompt: prompt,
		OnDone: func(value string) tea.Msg {
			return onResult(value == "y")
		},
		OnCancel: func() tea.Msg {
			return onResult(false)
		},
	}
}

func ConfirmYes(prompt string, onYes func() tea.Msg) tea.Msg {
	return PromptForInput(prompt, nil, func(value string) tea.Msg {
		if value == "y" {
			return onYes()
		}
		return nil
	})
}

type MessageWithStatus interface {
	StatusMessage() string
}

type MessageWithMode interface {
	MessageWithStatus
	ModeMessage() string
}

type MessageWithRightMode interface {
	MessageWithStatus
	RightModeMessage() string
}
