package MainOrder

import (
	"fmt"
	"strings"
	"testing"

	l4g "github.com/alecthomas/log4go"
	"github.com/tidbcloud/qa-PlatformAPIAuto/openAPIScene"
	"github.com/tidbcloud/qa-PlatformAPIAuto/webScene"
	"github.com/tidbcloud/qa-gourd/ProductService"
)

func TestParallel(t *testing.T) {
	t.Parallel()
	if len(ParallelCaseList) == 0 {
		return
	}
	t.Run("Parallel", func(t *testing.T) {
		t.Parallel()
		for _, casedata := range ParallelCaseList {
			runCase := casedata
			var RequestInfo ProductService.E2ECase
			if IsOpenAPI == "N" {
				webRequestInfo := ProductService.GetWebAPIRequestInfo(&testing.T{}, orgType)
				RequestInfo = &webScene.WebE2ECase{
					WebRequestInfo: webRequestInfo,
				}
			} else {
				openAPIRequestInfo := ProductService.GetOpenAPIRequestInfo(&testing.T{}, orgType)
				RequestInfo = &openAPIScene.OpenAPIE2ECase{
					OpenAPIRequestInfo: openAPIRequestInfo,
				}
			}
			RequestInfo.AnalyzeAPIInfo()

			switch v := RequestInfo.(type) {
			case *webScene.WebE2ECase:
				if strings.Contains(runCase, "Import") || strings.Contains(runCase, "CDC") ||
					strings.Contains(runCase, "BR") || strings.Contains(runCase, "DataMigration") ||
					strings.Contains(runCase, "OpsCluster") {
					if !t.Run(fmt.Sprintf("CreateDedicatedCluster_%s", v.WebRequestInfo.Cluster.Provider), v.DedicatedCreateCluster) {
						return
					} else {
						clusterChan = append(clusterChan, v.WebRequestInfo.Cluster)
					}
				}
			case *openAPIScene.OpenAPIE2ECase:
				if strings.Contains(runCase, "Import") {
					if !t.Run(fmt.Sprintf("CreateDedicatedCluster_%s", v.OpenAPIRequestInfo.Cluster.Provider), v.DedicatedCreateCluster) {
						return
					} else {
						clusterChan = append(clusterChan, v.OpenAPIRequestInfo.Cluster)
					}
				}
			}

			//old arch param ini
			InitializationParameterConversion(RequestInfo)

			l4g.Info("______________%s", runCase)
			t.Run(runCase, func(t *testing.T) {
				RequestInfo.CallFunctionByName(runCase, t)
			})
		}
	})
	l4g.Info("Parallel done")
}
