package channel

import (
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/core/domain"
)

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

	for _, displayName := range []string{
		"中文 频道",
		"文档、笔记、文本",
	} {
		t.Run(displayName, func(t *testing.T) {
			slug := deriveChannelSlug(displayName, "chn_AbC123456789")

			require.Equal(t, "channel-abc12345", slug)
			require.NoError(t, domain.ValidateChannelSlug(slug))
		})
	}
}

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

	slug := deriveChannelSlug("Design Review 2026", "chn_unused")

	require.Equal(t, "design-review-2026", slug)
	require.NoError(t, domain.ValidateChannelSlug(slug))
}

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

	for _, displayName := range []string{
		"TiDB字符集与排序规则转换",
		"Research & Development",
	} {
		t.Run(displayName, func(t *testing.T) {
			slug := deriveChannelSlug(displayName, "chn_AbC123456789")

			require.Equal(t, "channel-abc12345", slug)
			require.NoError(t, domain.ValidateChannelSlug(slug))
		})
	}
}

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

	for _, displayName := range []string{"all", "all!!!", "thread-review", "thread-review!!!"} {
		t.Run(displayName, func(t *testing.T) {
			slug := deriveChannelSlug(displayName, "chn_reserved123")

			require.Equal(t, "channel-reserved", slug)
			require.NoError(t, domain.ValidateChannelSlug(slug))
		})
	}
}

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

	slug := ArchivedScopeProfileSlug("chn_original_room")

	require.NoError(t, domain.ValidateChannelSlug(slug))
	require.Contains(t, slug, "deleted-chn-original-room-")
	require.Equal(t, slug, ArchivedScopeProfileSlug("chn_original_room"))
	require.NotEqual(t, slug, ArchivedScopeProfileSlug("chn_other_room"))
	require.LessOrEqual(t, len(slug), 63)
}
