package controllers

import (
	"context"

	"github.com/lmika/awstools/internal/common/ui/uimodels"
	"github.com/lmika/awstools/internal/sqs-browse/models"
	"github.com/lmika/awstools/internal/sqs-browse/services/messages"
	"github.com/pkg/errors"
)

type MessageSendingController struct {
	messageService *messages.Service
	targetQueue    string
}

func NewMessageSendingController(messageService *messages.Service, targetQueue string) *MessageSendingController {
	return &MessageSendingController{
		messageService: messageService,
		targetQueue:    targetQueue,
	}
}

func (msh *MessageSendingController) ForwardMessage(message models.Message) uimodels.Operation {
	return uimodels.OperationFn(func(ctx context.Context) error {
		uiCtx := uimodels.Ctx(ctx)

		if msh.targetQueue == "" {
			return errors.New("target queue not set")
		}

		messageId, err := msh.messageService.SendTo(ctx, message, msh.targetQueue)
		if err != nil {
			return errors.Wrapf(err, "cannot send message to %v", msh.targetQueue)
		}

		uiCtx.Message("Message sent to " + msh.targetQueue + ", id = " + messageId)
		return nil
	})
}