package utils

import (
	"fmt"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/tidbcloud/pkgv2/bizerr"
)

func TestFormatKafkaTestConnectionErrorContent(t *testing.T) {
	tests := []struct {
		name           string
		err            error
		expectedResult string
	}{
		{
			name:           "Timeout error",
			err:            fmt.Errorf("Client.Timeout exceeded while awaiting headers"),
			expectedResult: "connect to downstream timeout. Please retry later. If retry can not solve the problem, please contact technical support.",
		},
		{
			name:           "Request fail 400 with single line",
			err:            fmt.Errorf("Request fail, 400-single line"),
			expectedResult: "single line.",
		},
		{
			name:           "Request fail 400 with multiline",
			err:            fmt.Errorf("Request fail, 400-Error detail line 1\nError detail line 2"),
			expectedResult: "Error detail line 1.<ul><li>Error detail line 2</li></ul>" + privateLinkConnectionErrorTips,
		},
		{
			name:           "Request fail 400 with multiple empty lines",
			err:            fmt.Errorf("Request fail, 400-multiple empty lines\n   \n \n   "),
			expectedResult: "multiple empty lines.",
		},
		{
			name:           "Unknown error",
			err:            fmt.Errorf("Some other error"),
			expectedResult: "Some other error",
		},
		{
			name:           "biz error",
			err:            bizerr.New(bizerr.ErrCodeUnknown, "multiple empty lines\n   \n \n   "),
			expectedResult: "multiple empty lines.",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			result := FormatKafkaTestConnectionErrorContent(tt.err)
			assert.Equal(t, tt.expectedResult, result)
		})
	}
}
