package MainOrder

import (
	"fmt"
	"testing"

	"github.com/tidbcloud/qa-PlatformAPIAuto/openAPIScene"
	"github.com/tidbcloud/qa-gourd/ProductService"

	l4g "github.com/alecthomas/log4go"
)

func TestServerless(t *testing.T) {
	t.Parallel()
	if len(ServerlessTierCaseList) == 0 {
		return
	}
	//var reloadFlag bool
	var workloadFlag bool
	var autonomousFlag bool

	requestInfo := DeepCopy(RequestInfo) //Solve the problem of context confusion during concurrency
	requestInfo.SetReporter(t)
	ProductService.SendStartBillsMeteringSignal("Serverless")
	if requestInfo.GetClusterInfo().ClusterId == "" {
		if !t.Run(fmt.Sprintf("CreateServerlessCluster"), requestInfo.ServerlessTierCreateCluster) {
			return
		}
	}

	//old arch param ini
	InitializationParameterConversion(requestInfo)

	for _, casedata := range ServerlessTierCaseList {
		if casedata == "ServerlessTierWorkloadRunOperation" {
			workloadFlag = true
			continue
		}
		if casedata == "ServerlessTierMonitoring" {
			autonomousFlag = true
			continue
		}

		l4g.Info("+++++++++++%s", casedata)
		t.Run(casedata, func(t *testing.T) {
			requestInfo.CallFunctionByName(casedata, t)
		})
	}

	if workloadFlag {
		t.Run("ServerlessTierWorkloadRunOperation", func(t *testing.T) {
			requestInfo.CallFunctionByName("ServerlessTierWorkloadRunOperation", t)
		})
	}

	if autonomousFlag {
		t.Run("ServerlessTierMonitoring", func(t *testing.T) {
			requestInfo.CallFunctionByName("ServerlessTierMonitoring", t)
		})
	}

	if requestInfo.GetClusterInfo().ClusterId != "" && !requestInfo.GetClusterInfo().RemainFlag {
		requestInfo.DeleteCluster()
	}
	ProductService.SendStopBillsMeteringSignal("Serverless")

	if v, ok := requestInfo.(*openAPIScene.OpenAPIE2ECase); ok {
		v.OpenAPIRequestInfo.DeleteAPIKey()
	}
	l4g.Info("ServerlessTierMainOrder done")
}
