package threadcontext

import (
	"testing"

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

func TestClassifyReplyThreadOnlyReturnsFactsForReplyThreadTargets(t *testing.T) {
	facts, ok := ClassifyReplyThread("#agentteam:00000034", "message_history_read")
	require.True(t, ok)
	require.Equal(t, ReplyThreadFacts{Target: "#agentteam:00000034", ReadHistoryTool: "message_history_read"}, facts)

	_, ok = ClassifyReplyThread("#agentteam", "message_history_read")
	require.False(t, ok)
}

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

	for _, test := range []struct {
		name   string
		target string
		want   bool
	}{
		{name: "channel", target: "#ops"},
		{name: "channel reply", target: "#ops:AbCd1234", want: true},
		{name: "dm", target: "DM:@alpha-agent"},
		{name: "dm reply", target: "dm:@alpha-agent:AbCd1234", want: true},
		{name: "task", target: "#tsk_abc123"},
		{name: "team", target: "#team_abcdefghijklmn"},
		{name: "team reply", target: "#team_abcdefghijklmn:AbCd1234", want: true},
		{name: "malformed task reply", target: "#tsk_abc123:deadbeef"},
		{name: "malformed team", target: "#team_short:deadbeef"},
		{name: "invalid short id", target: "#ops:abc"},
	} {
		t.Run(test.name, func(t *testing.T) {
			t.Parallel()
			_, ok := ClassifyReplyThread(test.target, "message_history_read")
			require.Equal(t, test.want, ok)
		})
	}
}
