package dispatcher

import (
	"fmt"
	tea "github.com/charmbracelet/bubbletea"
	"github.com/lmika/awstools/internal/common/ui/events"
	"github.com/lmika/awstools/internal/common/ui/uimodels"
)

type DispatcherContext struct {
	Publisher MessagePublisher
}

func (dc DispatcherContext) Messagef(format string, args ...interface{}) {
	dc.Publisher.Send(events.Message(fmt.Sprintf(format, args...)))
}

func (dc DispatcherContext) Send(teaMessage tea.Msg) {
	dc.Publisher.Send(teaMessage)
}

func (dc DispatcherContext) Message(msg string) {
	dc.Publisher.Send(events.Message(msg))
}

func (dc DispatcherContext) Input(prompt string, onDone uimodels.Operation) {
	dc.Publisher.Send(events.PromptForInput{
		Prompt: prompt,
		OnDone: onDone,
	})
}