package essential_test

import (
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/dataflow-service-e2e/cases"
	"github.com/tidbcloud/dataflow-service-e2e/cases/essential/backup"
	"github.com/tidbcloud/dataflow-service-e2e/cases/essential/changefeed"
	"github.com/tidbcloud/dataflow-service-e2e/cases/essential/common"
	dmcase "github.com/tidbcloud/dataflow-service-e2e/cases/essential/dm"
	exportcase "github.com/tidbcloud/dataflow-service-e2e/cases/essential/export"
	importcase "github.com/tidbcloud/dataflow-service-e2e/cases/essential/import_data"
	. "github.com/tidbcloud/dataflow-service-e2e/internal/model"
)

func TestEssentialCaseNamesAndCapabilityMatrix(t *testing.T) {
	casesToTest := []struct {
		caseDef cases.E2ECase
		name    string
		modes   string
	}{
		{exportcase.NewExportLifecycleSmokeCase(AWS), "awsEssentialV1ExportLifecycleSmoke", common.APIModesBoth},
		{exportcase.NewExportLifecycleSmokeCase(AliCloud), "alicloudEssentialV1ExportLifecycleSmoke", common.APIModesBoth},
		{backup.NewSnapshotRestoreSmokeCase(AWS), "awsEssentialV1SnapshotRestoreSmoke", common.APIConsoleOnly},
		{backup.NewSnapshotRestoreSmokeCase(AliCloud), "alicloudEssentialV1SnapshotRestoreSmoke", common.APIConsoleOnly},
		{backup.NewPiTRRestoreSmokeCase(AWS), "awsEssentialV1PiTRRestoreSmoke", common.APIConsoleOnly},
		{backup.NewPiTRRestoreSmokeCase(AliCloud), "alicloudEssentialV1PiTRRestoreSmoke", common.APIConsoleOnly},
		{changefeed.NewCDCChangefeedLifecycleSmokeCase(AWS), "awsEssentialV1CDCChangefeedLifecycleSmoke", common.APIModesBoth},
		{changefeed.NewCDCChangefeedLifecycleSmokeCase(AliCloud), "alicloudEssentialV1CDCChangefeedLifecycleSmoke", common.APIModesBoth},
		{dmcase.NewFullMigrationLifecycleSmokeCase(AWS), "awsEssentialV1DMFullMigrationLifecycleSmoke", common.APIModesBoth},
		{dmcase.NewFullMigrationLifecycleSmokeCase(AliCloud), "alicloudEssentialV1DMFullMigrationLifecycleSmoke", common.APIModesBoth},
		{importcase.NewImportLifecycleSmokeCase(AWS), "awsEssentialV1ImportLifecycleSmoke", common.APIModesBoth},
		{importcase.NewImportLifecycleSmokeCase(AliCloud), "alicloudEssentialV1ImportLifecycleSmoke", common.APIModesBoth},
		{importcase.NewImportDataFormatLifecycleCase(AWS, "AURORA_SNAPSHOT"), "awsEssentialV1ImportAuroraSnapshotLifecycle", common.APIModesBoth},
		{importcase.NewImportDataFormatLifecycleCase(AWS, "PARQUET"), "awsEssentialV1ImportParquetLifecycle", common.APIModesBoth},
	}
	for _, tc := range casesToTest {
		t.Run(tc.name, func(t *testing.T) {
			require.Equal(t, tc.name, tc.caseDef.Name())
			require.NotEmpty(t, tc.caseDef.Tags()[cases.TagKeyDomain])
			require.Equal(t, tc.modes, tc.caseDef.Tags()[cases.TagKeyAPIModes])
		})
	}
}
