//nolint:gomnd
package compact

import (
	"github.com/shiningrush/fastflow/pkg/entity"
	"github.com/shiningrush/fastflow/pkg/entity/run"
	"github.com/tidbcloud/dataflow-service/app/container"
	"github.com/tidbcloud/dataflow-service/app/workflow"
	compact "github.com/tidbcloud/dataflow-service/app/workflow/action/backup/compact"
)

func GetCreateDag() (*entity.Dag, []run.Action) {
	actions := []run.Action{
		compact.NewCreateCompactBackupTaskAction(
			container.Global().TransProvider,
			container.Global().CompactBackupRepo,
			container.Global().LogBackupRepo,
			container.Global().BackupSettingRepo,
			container.Global().BucketRepo,
			container.Global().CompactRegionalFacade,
			container.Global().MgmtSvcGrpcClient,
			container.Global().ConfigCenterManager,
			container.Global().CompactBackupModel,
		),
		compact.NewSyncCompactBackupStatusAction(
			container.Global().TransProvider,
			container.Global().CompactBackupRepo,
			container.Global().CompactRegionalFacade,
			container.Global().MgmtSvcGrpcClient,
		),
		compact.NewCleanupCompactBackupAction(
			container.Global().TransProvider,
			container.Global().CompactBackupRepo,
			container.Global().CompactRegionalFacade,
			container.Global().MgmtSvcGrpcClient,
		),
	}

	dag := &entity.Dag{
		BaseInfo: entity.BaseInfo{
			ID: workflow.DagCreateCompactBackup,
		},
		Name: workflow.DagCreateCompactBackup,
		Vars: entity.DagVars{
			workflow.KeyCompactBackupID: {},
		},
		Status: entity.DagStatusNormal,
		Tasks: []entity.Task{
			{
				ID:          workflow.ActionCreateCompactBackupTask,
				ActionName:  workflow.ActionCreateCompactBackupTask,
				TimeoutSecs: 30 * 60,
			},
			{
				ID:          workflow.ActionSyncCompactBackupStatus,
				ActionName:  workflow.ActionSyncCompactBackupStatus,
				DependOn:    []string{workflow.ActionCreateCompactBackupTask},
				TimeoutSecs: 12 * 60 * 60, // 12 hours - timeout controlled by business logic
			},
			{
				ID:          workflow.ActionCleanupCompactBackup,
				ActionName:  workflow.ActionCleanupCompactBackup,
				DependOn:    []string{workflow.ActionSyncCompactBackupStatus},
				TimeoutSecs: 30 * 60,
			},
		},
	}
	return dag, actions
}
