package transportunibus

import (
	"context"
	"log/slog"
	"strings"

	"github.com/enmanuel/agents/pkg/transport"
)

// DemoEchoHandler returns a minimal bot handler that proves the unibus transport
// end to end: it receives a neutral InboundMessage and answers in the same room.
// It echoes the message body back as a reply, with one built-in command
// (!ping → pong) to show command routing works over the bus. It is intentionally
// tiny — the point is the transport, not the bot.
func DemoEchoHandler(t transport.Transport, logger *slog.Logger) transport.Handler {
	if logger == nil {
		logger = slog.Default()
	}
	return func(ctx context.Context, in transport.InboundMessage) {
		reply := "echo: " + in.Body
		if strings.TrimSpace(in.Body) == "!ping" {
			reply = "pong"
		}
		out := transport.OutboundReply{
			RoomID:   in.RoomID,
			ReplyTo:  in.MsgID,
			ThreadID: in.ThreadID,
			Markdown: reply,
		}
		if err := t.Reply(ctx, out); err != nil {
			logger.Error("demo echo reply failed", "err", err, "sender", in.SenderID)
		}
	}
}
