package dag

import (
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/service/workflow/action"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/service/workflow/common"
)

func TestDeleteClusterDagTasks(t *testing.T) {
	dag := DeleteClusterDag()
	require.NotNil(t, dag)
	require.Len(t, dag.Tasks, 5)

	// Task 1: delete_private_link_service (no deps)
	require.Equal(t, action.DeletePrivateLinkService, dag.Tasks[0].ID)
	require.Equal(t, action.DeletePrivateLinkService, dag.Tasks[0].ActionName)
	require.Empty(t, dag.Tasks[0].DependOn)
	require.Contains(t, dag.Tasks[0].Params, common.KeyClusterId)

	// Task 2: delete_tidb_group → depends on task 1
	require.Equal(t, action.DeleteTidbGroup, dag.Tasks[1].ID)
	require.Equal(t, action.DeleteTidbGroup, dag.Tasks[1].ActionName)
	require.Equal(t, []string{action.DeletePrivateLinkService}, dag.Tasks[1].DependOn)

	// Task 3: delete_gke_heterogeneous_before_delete_cluster → depends on task 2
	require.Equal(t, action.DeleteGKEHeterogeneousBeforeDeleteClusterActionName, dag.Tasks[2].ID)
	require.Equal(t, action.DeleteGKEHeterogeneousBeforeDeleteClusterActionName, dag.Tasks[2].ActionName)
	require.Equal(t, []string{action.DeleteTidbGroup}, dag.Tasks[2].DependOn)

	// Task 4: delete_cluster → depends on task 3
	require.Equal(t, action.DeleteCluster, dag.Tasks[3].ID)
	require.Equal(t, action.DeleteCluster, dag.Tasks[3].ActionName)
	require.Equal(t, []string{action.DeleteGKEHeterogeneousBeforeDeleteClusterActionName}, dag.Tasks[3].DependOn)

	// Task 5: delete_cluster_meta → depends on task 4
	require.Equal(t, action.DeleteClusterMeta, dag.Tasks[4].ID)
	require.Equal(t, action.DeleteClusterMeta, dag.Tasks[4].ActionName)
	require.Equal(t, []string{action.DeleteCluster}, dag.Tasks[4].DependOn)
}
