package routing

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestMentionRoutingContentPlainMessageReturnsContentUnchanged(t *testing.T) {
	content := "hello @alpha-agent"
	require.Equal(t, content, MentionRoutingContent("", content))
}

func TestMentionRoutingContentSingleSourceOwnerQuoteKeepsLiveForwardText(t *testing.T) {
	content := "Instruction:\nplease review with @beta-agent\n\nSource message refs:\n- source_message_id=msg_1\n\nQuoted messages:\n[1] author=@alice message_id=msg_1 created_at=2026-04-28T09:00:00Z\n> earlier ping @alpha-agent\n"
	require.Equal(t, "please review with @beta-agent\n\n> earlier ping @alpha-agent", MentionRoutingContent(MessageTypeOwnerQuote, content))
}

func TestMentionRoutingContentMultiSourceOwnerQuoteKeepsRetainedMentions(t *testing.T) {
	content := "Instruction:\nplease review with @beta-agent\n\nSource message refs:\n- source_message_id=msg_1\n- source_message_id=msg_2\n\nQuoted messages:\n[1] author=@alice message_id=msg_1 created_at=2026-04-28T09:00:00Z\nearlier ping @alpha-agent\n"
	routingContent := MentionRoutingContent(MessageTypeOwnerQuote, content)

	require.Equal(t, "please review with @beta-agent\n\nearlier ping @alpha-agent", routingContent)
	require.Equal(t, []string{"beta-agent", "alpha-agent"}, ParseDirectMentionTokens(routingContent))
}

func TestMentionRoutingContentOwnerQuoteWithoutInstructionReturnsEmpty(t *testing.T) {
	content := "Owner quote\n\nQuoted messages:\n[1] author=@alice message_id=msg_1 created_at=2026-04-28T09:00:00Z\n> ping @alpha-agent\n"
	require.Equal(t, "", MentionRoutingContent(MessageTypeOwnerQuote, content))
}

func TestExtractOwnerQuoteInstructionSupportsBodyHeader(t *testing.T) {
	content := "Body:\n@beta-agent please review.\n\nSource message refs:\n- source_message_id=msg_1\n"
	require.Equal(t, "@beta-agent please review.", ExtractOwnerQuoteInstruction(content))
}

func TestExtractOwnerQuoteMentionContentKeepsBracketedQuotedContent(t *testing.T) {
	content := "Instruction:\nplease review\n\nSource message refs:\n- source_message_id=msg_1\n\nQuoted messages:\n[1] author=@alice message_id=msg_1 created_at=2026-04-28T09:00:00Z\n[urgent] @alpha-agent please check\n"
	routingContent := MentionRoutingContent(MessageTypeOwnerQuote, content)

	require.Contains(t, routingContent, "[urgent] @alpha-agent please check")
	require.NotContains(t, routingContent, "author=@alice")
	require.Equal(t, []string{"alpha-agent"}, ParseDirectMentionTokens(routingContent))
}

func TestExtractOwnerQuoteMentionContentStripsAttachmentMetadata(t *testing.T) {
	content := "Instruction:\nplease review with @beta-agent\n\nSource message refs:\n- source_message_id=msg_1\n- source_message_id=msg_2\n\nQuoted messages:\n[1] author=@alice message_id=msg_1 created_at=2026-04-28T09:00:00Z\nquoted body @alpha-agent\nAttachments:\n- @all.txt (text/plain, 10 bytes)\n- @online.log\n\n[2] author=@carol message_id=msg_2 created_at=2026-04-28T09:01:00Z\nfollow-up @gamma-agent\n"
	routingContent := MentionRoutingContent(MessageTypeOwnerQuote, content)

	require.NotContains(t, routingContent, "Attachments:")
	require.NotContains(t, routingContent, "@all")
	require.NotContains(t, routingContent, "@online")
	require.Equal(t, []string{"beta-agent", "alpha-agent", "gamma-agent"}, ParseDirectMentionTokens(routingContent))
}
