package taskboard

import (
	"errors"
	"testing"

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

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

	slug, err := parseChannelTarget("#agentteam-in-agentteam")
	require.NoError(t, err)
	require.Equal(t, "agentteam-in-agentteam", slug)
}

// On the taskboard (secondary) path a bare name, a raw channel id, a DM, or a DM
// reply thread classify as ErrInvalidChannelTarget so the exec client attaches
// one bounded hint. A channel reply thread is a valid form but the taskboard
// path does not host tasks on it, so it stays a generic badRequest (no
// channel-format hint). The canonical agent path accepts channel reply threads
// via its own resolver — see TestAgentTaskChannelTargetDiagnostic.
func TestParseChannelTargetRejectsNonChannelTargets(t *testing.T) {
	t.Parallel()

	for _, target := range []string{"agentteam-in-agentteam", "chn_abc", "dm:@alice", "dm:@alice:AbCd1234"} {
		_, err := parseChannelTarget(target)
		require.Error(t, err)
		require.True(t, errors.Is(err, ErrInvalidChannelTarget), "target %q must be ErrInvalidChannelTarget, got %v", target, err)
	}

	_, err := parseChannelTarget("#agentteam-in-agentteam:09b93379")
	require.Error(t, err)
	require.True(t, errors.Is(err, ErrBadRequest))
	require.Equal(t, "threads do not support tasks", err.Error())

	_, err = parseChannelTarget("general")
	require.Error(t, err)
	require.True(t, errors.Is(err, ErrInvalidChannelTarget))
	require.Equal(t, "invalid channel identifier", err.Error())
}
