package dag

func PauseResumePlans() []string {
	return []string{PlanPauseSharedPool, PlanResumeSharedPool}
}

func PauseResumeConflictPlans() []string {
	plans := PauseResumeResourceMutationPlans()
	plans = append(plans, PauseResumeTiBRUpgradePlans()...)
	plans = append(plans, PauseResumeDMPlans()...)
	return append(plans, PauseResumeBackupRestorePlans()...)
}

func PauseResumeResourceMutationPlans() []string {
	return []string{
		PlanCreateSharedPool, PlanDeleteSharedPool,
		PlanUpdateComponent, PlanApplyComponent, PlanCreateComponent,
		PlanDeleteTiKVGroup,
		PlanCreateTiDBCluster, PlanUpdateTiDBCluster, PlanDeleteTiDBCluster,
		PlanCreateTiDBGroup, PlanUpdateTiDBGroup, PlanDeleteTiDBGroup,
		PlanSetSharedPoolPDDeploymentModeToMonolithic, PlanSetSharedPoolPDDeploymentModeToMicroservice,
		PlanEnableCoprocessorWorker, PlanDisableCoprocessorWorker,
		PlanApplySemConfig,
	}
}

func PauseResumeTiBRUpgradePlans() []string {
	return []string{PlanUpgradeTiBRAutoBackup, PlanUpgradeTiBRGC}
}

func PauseResumeDMPlans() []string {
	return []string{PlanApplyDMCluster}
}

// PauseResumeBackupRestorePlans are not owned or fenced by Pause/Resume.
// Admission and transitional Delete must therefore fail closed while any of
// these workflows is running against either the source or target pool.
func PauseResumeBackupRestorePlans() []string {
	return []string{
		PlanCreateManualBackup, PlanDeleteManualBackup,
		PlanCreateManualBackupRestore, PlanDeleteManualBackupRestore,
		PlanCreateManualBackupXRestore, PlanDeleteManualBackupXRestore,
		PlanCreateLightweightRestore, PlanDeleteLightweightRestore,
		PlanCreateLightweightXRestore, PlanDeleteLightweightXRestore,
		PlanCreateClassicRestore, PlanDeleteClassicRestore,
		PlanUpdateBackupGcSetting,
	}
}
