package dag

import (
	"fmt"

	"github.com/tidbcloud/fastflow/pkg/entity"

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

func CreateExportDag() *entity.Dag {
	return &entity.Dag{
		BaseInfo: entity.BaseInfo{
			ID: common.CreateExport,
		},
		Name:   common.CreateExport,
		Status: entity.DagStatusNormal,
		Vars: map[string]entity.DagVar{
			common.KeyClusterId:     {},
			common.KeyExportId:      {},
			common.KeyTidbGroupId:   {},
			common.KeyTidbGroupIds:  {},
			workflow.KeyTraceId:     {},
			workflow.KeyRequestMeta: {},
		},
		Tasks: []entity.Task{
			{
				ID:         action.CreateExportTiDBGroupAction,
				ActionName: action.CreateExportTiDBGroupAction,
				Params: map[string]any{
					common.KeyClusterId:   fmt.Sprintf("{{%s}}", common.KeyClusterId),
					common.KeyExportId:    fmt.Sprintf("{{%s}}", common.KeyExportId),
					common.KeyTidbGroupId: fmt.Sprintf("{{%s}}", common.KeyTidbGroupId),
				},
			},
			{
				ID:         action.PollTidbGroupUntilAvailable,
				ActionName: action.PollTidbGroupUntilAvailable,
				DependOn:   []string{action.CreateExportTiDBGroupAction},
				Params: map[string]any{
					common.KeyClusterId:    fmt.Sprintf("{{%s}}", common.KeyClusterId),
					common.KeyTidbGroupIds: fmt.Sprintf("{{%s}}", common.KeyTidbGroupIds),
				},
			},
			{
				ID:         action.CreateExportAction,
				ActionName: action.CreateExportAction,
				DependOn:   []string{action.PollTidbGroupUntilAvailable},
				Params: map[string]any{
					common.KeyClusterId: fmt.Sprintf("{{%s}}", common.KeyClusterId),
					common.KeyExportId:  fmt.Sprintf("{{%s}}", common.KeyExportId),
				},
			},
			{
				ID:         action.PollExportAction,
				ActionName: action.PollExportAction,
				DependOn:   []string{action.CreateExportAction},
				Params: map[string]any{
					common.KeyClusterId: fmt.Sprintf("{{%s}}", common.KeyClusterId),
					common.KeyExportId:  fmt.Sprintf("{{%s}}", common.KeyExportId),
				},
			},
			{
				ID:         action.DeleteExportTiDBGroupAction,
				ActionName: action.DeleteExportTiDBGroupAction,
				DependOn:   []string{action.PollExportAction},
				Params: map[string]any{
					common.KeyClusterId: fmt.Sprintf("{{%s}}", common.KeyClusterId),
					common.KeyExportId:  fmt.Sprintf("{{%s}}", common.KeyExportId),
				},
			},
		},
	}
}
