package webScene

import (
	"testing"

	"github.com/dailymotion/allure-go"
	"github.com/tidbcloud/qa-PlatformAPIAuto/common"
	imp "github.com/tidbcloud/qa-PlatformAPIAuto/webScene/import"
	importCases "github.com/tidbcloud/qa-PlatformAPIAuto/webScene/import/cases"
)

// just for testing now
func (w *WebE2ECase) ImportTestSourceFormatInDedicatedAws(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestSourceFormats(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, false)
}

func (w *WebE2ECase) ImportTestSourceFormatInServerlessAws(t *testing.T) {
	importCases.RunImportTestSourceFormats(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, true)
}

func (w *WebE2ECase) ImportTestEmptyTableInDedicatedAws(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestEmptyTable(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, false)
}

func (w *WebE2ECase) ImportTestEmptyTableInServerlessAws(t *testing.T) {
	importCases.RunImportTestEmptyTable(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, true)
}

func (w *WebE2ECase) ImportTestSourceDatabasesInDedicatedAws(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestSourceDatabases(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, false)
}

func (w *WebE2ECase) ImportTestSourceDatabasesInServerlessAws(t *testing.T) {
	importCases.RunImportTestSourceDatabases(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, true)
}

func (w *WebE2ECase) ImportTestCompressFormatsInDedicatedGcp(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestCompressFormats(t, w.WebRequestInfo.Cluster.ClusterId, imp.GcpProvider, false)
}

func (w *WebE2ECase) ImportTestCompressFormatsInDedicatedAws(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestCompressFormats(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, false)
}

func (w *WebE2ECase) ImportTestCompressFormatsInServerlessAws(t *testing.T) {
	importCases.RunImportTestCompressFormats(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, true)
}

func (w *WebE2ECase) ImportTestSourceFormatInDedicatedGcp(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestSourceFormats(t, w.WebRequestInfo.Cluster.ClusterId, imp.GcpProvider, false)
}

func (w *WebE2ECase) ImportTestBasicOperationInDedicatedAws(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestBasicOperation(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, false)
}

func (w *WebE2ECase) ImportTestBasicOperationInServerlessAws(t *testing.T) {
	importCases.RunImportTestBasicOperation(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, true)
}

func (w *WebE2ECase) ImportTestBasicOperationInDedicatedGcp(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestBasicOperation(t, w.WebRequestInfo.Cluster.ClusterId, imp.GcpProvider, false)
}

func (w *WebE2ECase) ImportTestCsvParamInServerlessAws(t *testing.T) {
	importCases.RunImportTestCsvParam(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, true)
}

func (w *WebE2ECase) ImportTestCsvParamInDedicatedAws(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestCsvParam(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, false)
}

func (w *WebE2ECase) ImportTestMappingInServerlessAws(t *testing.T) {
	importCases.RunImportTestMapping(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, true)
}

func (w *WebE2ECase) ImportTestMappingInDedicatedAws(t *testing.T) {
	t.Parallel()
	importCases.RunImportTestMapping(t, w.WebRequestInfo.Cluster.ClusterId, imp.AwsProvider, false)
}

//func GcpImportSqlOperation(t *testing.T) {
//	var provider = "gcp"
//	if gcpClusterId == "" {
//		allure.Test(t,
//			allure.Epic("TestGcpImportSqlOperation"),
//			allure.Feature("CheckCreateCluster"),
//			allure.Description("CheckCreateCluster"),
//			allure.Action(func() {
//				gcpClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
//			}))
//	}
//	allure.Test(t,
//		allure.Epic("TestGcpImportSqlOperation"),
//		allure.Feature("CheckImportOperation"),
//		allure.Description("CheckImportOperation"),
//		allure.Action(func() {
//			common.CheckSqlImportOperation(t, gcpClusterId, "", provider, "")
//		}))
//}

//func GcpImportAuroraS3Operation(t *testing.T) {
//	var provider = "gcp"
//	if gcpClusterId == "" {
//		allure.Test(t,
//			allure.Epic("TestGcpImportAuroraS3Operation"),
//			allure.Feature("CheckCreateCluster"),
//			allure.Description("CheckCreateCluster"),
//			allure.Action(func() {
//				gcpClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
//			}))
//	}
//	allure.Test(t,
//		allure.Epic("TestGcpImportAuroraS3Operation"),
//		allure.Feature("CheckImportAuroraS3Operation"),
//		allure.Description("CheckImportAuroraS3Operation"),
//		allure.Action(func() {
//			common.CheckImportAuroraS3Operation(t, gcpClusterId, "", provider, "", false)
//		}))
//}

//func GcpImportCsvOperation(t *testing.T) {
//	var provider = "gcp"
//	if gcpClusterId == "" {
//		allure.Test(t,
//			allure.Epic("TestGcpImportCsvOperation"),
//			allure.Feature("CheckCreateCluster"),
//			allure.Description("CheckCreateCluster"),
//			allure.Action(func() {
//				gcpClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
//			}))
//	}
//	allure.Test(t,
//		allure.Epic("TestGcpImportCsvOperation"),
//		allure.Feature("CheckImportCsvOperation"),
//		allure.Description("CheckImportCsvOperation"),
//		allure.Action(func() {
//			common.CheckImportCsvOperation(t, gcpClusterId, "", provider, "")
//		}))
//}

//func GcpImportParquetOperation(t *testing.T) {
//	var provider = "gcp"
//	if gcpClusterId == "" {
//		allure.Test(t,
//			allure.Epic("TestGcpImportParquetOperation"),
//			allure.Feature("CheckCreateCluster"),
//			allure.Description("CheckCreateCluster"),
//			allure.Action(func() {
//				gcpClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
//			}))
//	}
//	allure.Test(t,
//		allure.Epic("TestGcpImportParquetOperation"),
//		allure.Feature("CheckImportParquetOperation"),
//		allure.Description("CheckImportParquetOperation"),
//		allure.Action(func() {
//			common.CheckImportParquetOperation(t, gcpClusterId, "", provider, "", "")
//		}))
//}

//func GcpImportSnappyParquetOperation(t *testing.T) {
//	var provider = "gcp"
//	if gcpClusterId == "" {
//		allure.Test(t,
//			allure.Epic("TestGcpImportSnappyParquetOperation"),
//			allure.Feature("CheckCreateCluster"),
//			allure.Description("CheckCreateCluster"),
//			allure.Action(func() {
//				gcpClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
//			}))
//	}
//	allure.Test(t,
//		allure.Epic("TestGcpImportSnappyParquetOperation"),
//		allure.Feature("CheckImportSnappyParquetOperation"),
//		allure.Description("CheckImportSnappyParquetOperation"),
//		allure.Action(func() {
//			common.CheckImportParquetOperation(t, gcpClusterId, "", provider, "", "snappy")
//		}))
//}

/*func (w *WebE2ECase) AwsImportSqlOperation(t *testing.T) {
	var provider = "aws"
	if awsClusterId == "" {
		allure.Test(t,
			allure.Epic("TestAwsImportSqlOperation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				awsClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
			}))
	}
	allure.Test(t,
		allure.Epic("TestAwsImportSqlOperation"),
		allure.Feature("CheckImportOperation"),
		allure.Description("CheckImportOperation"),
		allure.Action(func() {
			common.CheckSqlImportOperation(t, awsClusterId, "", provider, "", false)
		}))
}

func (w *WebE2ECase) AwsImportAuroraS3Operation(t *testing.T) {
	var provider = "aws"
	if awsClusterId == "" {
		allure.Test(t,
			allure.Epic("TestAwsImportAuroraS3Operation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				awsClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
			}))
	}
	allure.Test(t,
		allure.Epic("TestAwsImportAuroraS3Operation"),
		allure.Feature("CheckImportAuroraS3Operation"),
		allure.Description("CheckImportAuroraS3Operation"),
		allure.Action(func() {
			common.CheckImportAuroraS3Operation(t, awsClusterId, "", provider, "", false)
		}))
}

func (w *WebE2ECase) AwsImportCsvOperation(t *testing.T) {
	var provider = "aws"
	if awsClusterId == "" {
		allure.Test(t,
			allure.Epic("TestAwsImportCsvOperation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				awsClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
			}))
	}
	allure.Test(t,
		allure.Epic("TestAwsImportCsvOperation"),
		allure.Feature("CheckImportCsvOperation"),
		allure.Description("CheckImportCsvOperation"),
		allure.Action(func() {
			common.CheckImportCsvOperation(t, awsClusterId, "", provider, "")
		}))
}

func (w *WebE2ECase) AwsImportParquetOperation(t *testing.T) {
	var provider = "aws"
	if awsClusterId == "" {
		allure.Test(t,
			allure.Epic("TestAwsImportParquetOperation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				awsClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
			}))
	}
	allure.Test(t,
		allure.Epic("TestAwsImportParquetOperation"),
		allure.Feature("CheckImportParquetOperation"),
		allure.Description("CheckImportParquetOperation"),
		allure.Action(func() {
			common.CheckImportParquetOperation(t, awsClusterId, "", provider, "", "")
		}))
}

func (w *WebE2ECase) AwsImportSnappyParquetOperation(t *testing.T) {
	var provider = "aws"
	if awsClusterId == "" {
		allure.Test(t,
			allure.Epic("TestAwsImportSnappyParquetOperation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				awsClusterId = common.CheckCreateCluster(t, provider, false, tidbCount, tikvCount, tiflashCount, "", "", "", "")
			}))
	}
	allure.Test(t,
		allure.Epic("TestAwsImportSnappyParquetOperation"),
		allure.Feature("CheckImportSnappyParquetOperation"),
		allure.Description("CheckImportSnappyParquetOperation"),
		allure.Action(func() {
			common.CheckImportParquetOperation(t, awsClusterId, "", provider, "", "snappy")
		}))
}

func (w *WebE2ECase) ServerlessTierImportSqlOperation(t *testing.T) {
	var provider = "aws"
	if serverlessTierClusterId == "" {
		allure.Test(t,
			allure.Epic("TestServerlessTierImportSqlOperation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				serverlessTierClusterId = common.CheckCreateServerlessCluster(t, provider, spendLimits)
			}))
	}

	allure.Test(t,
		allure.Epic("TestServerlessTierImportSqlOperation"),
		allure.Feature("CheckImportOperation"),
		allure.Description("CheckImportOperation"),
		allure.Action(func() {
			common.CheckSqlImportOperation(t, serverlessTierClusterId, "", provider, "", true)
		}))
}

func (w *WebE2ECase) ServerlessTierImportAuroraS3Operation(t *testing.T) {
	var provider = "aws"
	if serverlessTierClusterId == "" {
		allure.Test(t,
			allure.Epic("TestServerlessTierImportAuroraS3Operation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				serverlessTierClusterId = common.CheckCreateServerlessCluster(t, provider, spendLimits)
			}))
	}

	allure.Test(t,
		allure.Epic("TestServerlessTierImportAuroraS3Operation"),
		allure.Feature("CheckImportAuroraS3Operation"),
		allure.Description("CheckImportAuroraS3Operation"),
		allure.Action(func() {
			common.CheckImportAuroraS3Operation(t, serverlessTierClusterId, "", provider, "", true)
		}))
}

func (w *WebE2ECase) ServerlessTierImportCsvOperation(t *testing.T) {
	var provider = "aws"
	if serverlessTierClusterId == "" {
		allure.Test(t,
			allure.Epic("TestServerlessTierImportCsvOperation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				serverlessTierClusterId = common.CheckCreateServerlessCluster(t, provider, spendLimits)
			}))
	}

	allure.Test(t,
		allure.Epic("TestServerlessTierImportCsvOperation"),
		allure.Feature("CheckImportCsvOperation"),
		allure.Description("CheckImportCsvOperation"),
		allure.Action(func() {
			common.CheckImportCsvOperation(t, serverlessTierClusterId, "", provider, "")
		}))
}

func (w *WebE2ECase) ServerlessTierImportParquetOperation(t *testing.T) {
	var provider = "aws"
	if serverlessTierClusterId == "" {
		allure.Test(t,
			allure.Epic("TestServerlessTierImportParquetOperation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				serverlessTierClusterId = common.CheckCreateServerlessCluster(t, provider, spendLimits)
			}))
	}

	allure.Test(t,
		allure.Epic("TestServerlessTierImportParquetOperation"),
		allure.Feature("CheckImportParquetOperation"),
		allure.Description("CheckImportParquetOperation"),
		allure.Action(func() {
			common.CheckImportParquetOperation(t, serverlessTierClusterId, "", provider, "", "")
		}))
}

func (w *WebE2ECase) ServerlessTierImportSnappyParquetOperation(t *testing.T) {
	var provider = "aws"
	if serverlessTierClusterId == "" {
		allure.Test(t,
			allure.Epic("TestServerlessTierImportSnappyParquetOperation"),
			allure.Feature("CheckCreateCluster"),
			allure.Description("CheckCreateCluster"),
			allure.Action(func() {
				serverlessTierClusterId = common.CheckCreateServerlessCluster(t, provider, spendLimits)
			}))
	}

	allure.Test(t,
		allure.Epic("TestServerlessTierImportSnappyParquetOperation"),
		allure.Feature("CheckImportSnappyParquetOperation"),
		allure.Description("CheckImportSnappyParquetOperation"),
		allure.Action(func() {
			common.CheckImportParquetOperation(t, serverlessTierClusterId, "", provider, "", "snappy")
		}))
}*/

func (w *WebE2ECase) ServerlessTierLocalImport(t *testing.T) {
	allure.Test(t,
		allure.Epic("TestServerlessTierLocalImport"),
		allure.Feature("LocalImport"),
		allure.Description("LocalImport"),
		allure.Action(func() {
			common.LocalImport(t, w.WebRequestInfo.Cluster.ClusterId, true)
		}))
}
