//nolint:gocyclo,funlen
package dag

import (
	"github.com/tidbcloud/dataflow-service/app/container"
	"github.com/tidbcloud/dataflow-service/app/workflow"
	dag_backup_compact "github.com/tidbcloud/dataflow-service/app/workflow/dag/backup/compact"
	dag_backup_pit "github.com/tidbcloud/dataflow-service/app/workflow/dag/backup/pit"
	dag_backup_snapshot "github.com/tidbcloud/dataflow-service/app/workflow/dag/backup/snapshot"
	dag_backup_export "github.com/tidbcloud/dataflow-service/app/workflow/dag/backup_export"
	dag_backup_setting "github.com/tidbcloud/dataflow-service/app/workflow/dag/backup_setting"
	dag_backup_setting_aws "github.com/tidbcloud/dataflow-service/app/workflow/dag/backup_setting/aws"
	dag_backup_setting_gcp "github.com/tidbcloud/dataflow-service/app/workflow/dag/backup_setting/gcp"
	dag_biz_changefeed "github.com/tidbcloud/dataflow-service/app/workflow/dag/biz_changefeed"
	dag_bucket_aws "github.com/tidbcloud/dataflow-service/app/workflow/dag/bucket/aws"
	dag_bucket_azure "github.com/tidbcloud/dataflow-service/app/workflow/dag/bucket/azure"
	dag_bucket_gcp "github.com/tidbcloud/dataflow-service/app/workflow/dag/bucket/gcp"
	dag_crrf "github.com/tidbcloud/dataflow-service/app/workflow/dag/crrf"
	dag_restore "github.com/tidbcloud/dataflow-service/app/workflow/dag/restore"
)

//nolint:funlen
func RegisterDags() error {
	workflowModel := container.Global().WorkflowModel

	if err := registerDags(workflowModel); err != nil {
		return err
	}
	if err := registerBackupExportDag(workflowModel); err != nil {
		return err
	}
	return nil
}

func registerDags(workflowModel workflow.Workflow) error {
	if err := workflowModel.RegisterDag(dag_bucket_aws.GetCreateBucketDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_bucket_aws.GetDeleteBucketDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_bucket_gcp.GetCreateBucketDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_bucket_gcp.GetDeleteBucketDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_bucket_azure.GetCreateBucketDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_bucket_azure.GetDeleteBucketDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_setting.GetCreateBackupSettingDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_setting_aws.GetSetupBucket4DualRegionDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_setting_aws.GetSetupBucket4DisableDualRegionDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_setting_gcp.GetSetupBucket4ToggleDualRegionDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_snapshot.GetCreateDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_snapshot.GetWeeklyCreateDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_snapshot.GetDeleteDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_snapshot.GetCleanStorageDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_restore.GetRestoreSnapshotBackupDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_restore.GetGcSnapshotRestoreDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_restore.GetRestorePitBackupDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_restore.GetGcPitRestoreDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_pit.GetEnableDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_pit.GetDisableDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_pit.GetDeleteDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_pit.GetRestartDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_compact.GetCreateDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_compact.GetDeleteDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_biz_changefeed.GetCreateBizChangefeedDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_biz_changefeed.GetScaleBizChangefeedDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_biz_changefeed.GetDeleteBizChangefeedDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_crrf.GetEnableCRRFDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_crrf.GetDisableCRRFDag()); err != nil {
		return err
	}
	return nil
}

func registerBackupExportDag(workflowModel workflow.Workflow) error {
	if err := workflowModel.RegisterDag(dag_backup_export.GetCreateGCPBackupExportDag()); err != nil {
		return err
	}
	if err := workflowModel.RegisterDag(dag_backup_export.GetCreateAWSBackupExportDag()); err != nil {
		return err
	}
	return nil
}
