package agent

import (
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/api/dto"
)

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

	for _, target := range []string{
		"",
		"not-a-target",
		"#",
	} {
		t.Run(target, func(t *testing.T) {
			t.Parallel()

			_, err := writeMessageParamsFromRequest(dto.AgentSendMessageRequest{
				Target:  target,
				Content: "runtime reply",
			})
			require.Error(t, err)
		})
	}
}

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

	channelParams, err := writeMessageParamsFromRequest(dto.AgentSendMessageRequest{
		Target:  "#general:abc123",
		Content: "channel reply",
	})
	require.NoError(t, err)
	require.Equal(t, "#general:abc123", channelParams.TargetRef)

	dmParams, err := writeMessageParamsFromRequest(dto.AgentSendMessageRequest{
		Target:  "dm:@memagent",
		Content: "dm reply",
	})
	require.NoError(t, err)
	require.Equal(t, "memagent", dmParams.DMTo)

	taskScopeParams, err := writeMessageParamsFromRequest(dto.AgentSendMessageRequest{
		Target:  "#tsk_abc123",
		Content: "task discussion reply",
	})
	require.NoError(t, err)
	require.Equal(t, "tsk_abc123", taskScopeParams.TaskScopeID)
	require.Equal(t, "task discussion reply", taskScopeParams.Content)

	teamParams, err := writeMessageParamsFromRequest(dto.AgentSendMessageRequest{
		Target:  "#team_abcdefghijklmn",
		Content: "team channel reply",
	})
	require.NoError(t, err)
	require.Equal(t, "#team_abcdefghijklmn", teamParams.TargetRef)
	require.Empty(t, teamParams.TaskScopeID)

	teamThreadParams, err := writeMessageParamsFromRequest(dto.AgentSendMessageRequest{
		Target:  "#team_abcdefghijklmn:AbCd1234",
		Content: "team thread reply",
	})
	require.NoError(t, err)
	require.Equal(t, "#team_abcdefghijklmn:abcd1234", teamThreadParams.TargetRef)
	require.Empty(t, teamThreadParams.TaskScopeID)
}
