package message

import (
	"testing"

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

func TestParseOwnerQuoteSourceMessageIDsMatchesOnlyStructuredHeaders(t *testing.T) {
	t.Parallel()

	content := `Owner quote

Source message refs:
- source_message_id=msg_real
- source_message_id=msg_other

Instruction:
Summarize the explicit quotes only.

Quoted messages:
[1] author=@alice message_id=msg_real created_at=2026-03-29T12:00:00Z
This quoted body mentions message_id=msg_fake in plain text.

[2] author=@bob message_id=msg_other created_at=2026-03-29T12:05:00Z
No extra ids here.`

	require.ElementsMatch(
		t,
		[]string{"msg_real", "msg_other"},
		ParseOwnerQuoteSourceMessageIDs(content),
	)
}

func TestParseOwnerQuoteSourceMessageIDsAllowsBlankLinesInsideSourceRefsSection(t *testing.T) {
	t.Parallel()

	content := `Owner quote

Instruction:
Please review.

Source message refs:

- source_message_id=msg_real

- source_message_id=msg_other

Quoted messages:
[1] author=@alice message_id=msg_real created_at=2026-03-29T12:00:00Z
Quoted body.`

	require.ElementsMatch(
		t,
		[]string{"msg_real", "msg_other"},
		ParseOwnerQuoteSourceMessageIDs(content),
	)
}

func TestExtractOwnerQuoteInstructionIgnoresQuotedMetadataMentions(t *testing.T) {
	t.Parallel()

	content := `Owner quote

Instruction:
@alpha-agent summarize this thread.

Source message refs:
- source_message_id=msg_real

Quoted messages:
[1] author=@alice message_id=msg_real created_at=2026-03-29T12:00:00Z
Quoted body.`

	require.Equal(t, "@alpha-agent summarize this thread.", ExtractOwnerQuoteInstruction(content))
}

func TestExtractOwnerQuoteInstructionBodyHeader(t *testing.T) {
	t.Parallel()

	content := `Owner quote

Body:
@beta-agent please review.

Source message refs:
- source_message_id=msg_a

Quoted messages:
[1] author=@bob message_id=msg_a created_at=2026-03-29T12:00:00Z
Some body.`

	require.Equal(t, "@beta-agent please review.", ExtractOwnerQuoteInstruction(content))
}

func TestExtractOwnerQuoteMentionContent(t *testing.T) {
	t.Parallel()

	content := `Owner quote

Body:
@my-agent please review these.

Source message refs:
- source_message_id=msg_a
- source_message_id=msg_b

Quoted messages:
[1] author=@alice message_id=msg_a created_at=2026-03-29T12:00:00Z
Can @my-agent look at this?

[2] author=@bob message_id=msg_b created_at=2026-03-29T13:00:00Z
Also @another-agent should know.`

	result := ExtractOwnerQuoteMentionContent(content)
	require.Contains(t, result, "@my-agent please review these.")
	require.Contains(t, result, "Can @my-agent look at this?")
	require.Contains(t, result, "Also @another-agent should know.")
	// Metadata lines should be stripped
	require.NotContains(t, result, "author=@alice")
	require.NotContains(t, result, "source_message_id=")
	require.NotContains(t, result, "created_at=")
}

func TestExtractOwnerQuoteMentionContentNoInstruction(t *testing.T) {
	t.Parallel()

	content := `Owner quote

Body:

Source message refs:
- source_message_id=msg_a

Quoted messages:
[1] author=@alice message_id=msg_a created_at=2026-03-29T12:00:00Z
@target-agent check this out`

	result := ExtractOwnerQuoteMentionContent(content)
	require.NotContains(t, result, "author=@alice")
	require.Contains(t, result, "@target-agent check this out")
}
