package utils_test

import (
	"bytes"
	"fmt"
	"os"
	"strings"
	"testing"

	log "github.com/sirupsen/logrus"
	"github.com/stretchr/testify/assert"

	"github.com/tidbcloud/auto-deploy/internal/utils"
)

func TestStdoutPrinter(t *testing.T) {
	var buf bytes.Buffer
	printfn := utils.InsertPrefixPerLine("prefix: ", func(a ...any) {
		buf.WriteString(fmt.Sprint(a...))
	})
	printfn("abcd\nabcd2\nabcd")
	printfn("abcd\nabcd2\nabcd")
	// fmt.Printf(buf.String())
	assert.Equal(t, `prefix: abcd
prefix: abcd2
prefix: abcdabcd
prefix: abcd2
prefix: abcd`, buf.String())
}

func TestLogWithPreifx(t *testing.T) {
	// var buf bytes.Buffer
	printfn := utils.LogWithPrefix(log.InfoLevel, "prefix: ")
	printfn("abcd\nabcd2\nabcd")
	printfn("abcd\nabcd2\nabcd")
	printfn("abcd\nabcd2\n")
	printfn("abcd\nabcd2\n")
}

func TestRunCmd(t *testing.T) {
	log.SetLevel(log.DebugLevel)
	for i := range 1000 {
		_ = i
		output, err := utils.RunCommandAndGetOutput("/bin/bash", "-c", `
		base="0123456789abcdefghijklmnopqrstuv" # 32
		for((i=1;i<=16;i++));
		do
		  str="${str}${base}${base}${base}${base}${base}${base}${base}${base}" # 8
		done
		echo $str
		`)
		assert.NoError(t, err)
		assert.Equal(t, 4096, len(output))
	}
}

func TestGetPublicIp(t *testing.T) {
	os.Chdir("/workspaces/auto-deploy")
	publicIp, err := utils.RunCommandAndGetOutput("./scripts/get-eks-info.sh",
		"public-ip", "dev-seed-ap-northeast-1-eric-808", "ap-northeast-1")
	assert.NoError(t, err)
	ips := strings.Split(publicIp, "\n")
	fmt.Printf("ips=%v\n", ips)
}
