package lark

import (
	"strings"
	"testing"

	"github.com/stretchr/testify/require"

	larkim "github.com/tidbcloud/aisupport/packages/sdk-go/infra/lark/client/im"
)

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

	renderer := defaultRenderer{}
	tests := []struct {
		name     string
		render   func() (larkim.Message, error)
		title    string
		template string
	}{
		{name: "commentary", render: func() (larkim.Message, error) { return renderer.Commentary("task-1", "checking", "checking") }, title: "Commentary", template: "blue"},
		{name: "result", render: func() (larkim.Message, error) { return renderer.Result("task-1", "done") }, title: "Result", template: "green"},
		{name: "rejected", render: func() (larkim.Message, error) { return renderer.Rejected("task-1", "not allowed") }, title: "Rejected", template: "orange"},
		{name: "failed", render: func() (larkim.Message, error) { return renderer.Failed("task-1", "failed") }, title: "Failed", template: "red"},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			t.Parallel()
			message, err := tt.render()
			require.NoError(t, err)
			require.Equal(t, larkim.MessageTypeInteractive, message.Type())
			content, err := larkim.EncodeSendMessage(message)
			require.NoError(t, err)
			require.Contains(t, content, `"content":"`+tt.title+`"`)
			require.Contains(t, content, `"template":"`+tt.template+`"`)
			require.Contains(t, content, `"content":"task-1"`)
		})
	}
}

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

	message, err := (defaultRenderer{}).Commentary("task-1", "previous\n---\n"+strings.Repeat("问", 60), strings.Repeat("问", 60))
	require.NoError(t, err)
	content, err := larkim.EncodeSendMessage(message)
	require.NoError(t, err)
	require.Contains(t, content, `"content":"\u003c `+strings.Repeat("问", 50)+` ..."`)
	require.Contains(t, content, `"content":"previous\n---\n`+strings.Repeat("问", 60)+`"`)
}
