package mcp

import (
	"testing"

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

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

	for _, test := range []struct {
		input string
		want  string
	}{
		{input: "  #ops\t", want: "#ops"},
		{input: "#ops:AbCd1234", want: "#ops:abcd1234"},
		{input: "DM:@alpha-agent", want: "dm:@alpha-agent"},
		{input: "#tsk_abc123", want: "#tsk_abc123"},
		{input: "#team_abcdefghijklmn:AbCd1234", want: "#team_abcdefghijklmn:abcd1234"},
	} {
		got, err := normalizeMessageTarget(test.input)
		require.NoError(t, err)
		require.Equal(t, test.want, got)
	}

	for _, invalid := range []string{"[#ops]", "#tsk_Bad", "#team_short"} {
		_, err := normalizeMessageTarget(invalid)
		require.Error(t, err)
	}
}

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

	tests := []struct {
		name   string
		target string
		want   bool
	}{
		{name: "channel", target: "#ops", want: true},
		{name: "channel thread", target: "#ops:deadbeef"},
		{name: "dm", target: "dm:@alpha-agent"},
		{name: "dm thread", target: "dm:@alpha-agent:deadbeef"},
		{name: "task", target: "#tsk_abc123"},
		{name: "team", target: "#team_abcdefghijklmn"},
		{name: "team thread", target: "#team_abcdefghijklmn:deadbeef"},
		{name: "malformed task", target: "#tsk_Bad"},
		{name: "malformed team", target: "#team_short"},
		{name: "bracketed channel", target: "[#ops]"},
		{name: "invalid plain target", target: "ops"},
	}

	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
			t.Parallel()

			got := formatAcceptedSendResult(test.target, []string{"hello"}, []acceptedSendChunk{{MessageID: "1234567890abcdef"}}, agentSendMessageResponse{})
			if test.want {
				require.Contains(t, got, "threadReplyTarget: #ops:12345678")
				return
			}
			require.NotContains(t, got, "threadReplyTarget:")
		})
	}
}
