package workflow

type (
	BusinessType   string
	BusinessAction string
)

const (
	ClusterID         = "cluster_id"
	BusinessTypeKey   = "business_type"
	BusinessActionKey = "business_action"
	BusinessID        = "business_id"
	BRVersion         = "br_version"
	BRImageTag        = "br_image_tag"
	BRCustomOptions   = "br_custom_options"

	BusinessTypeBucket         BusinessType   = "bucket"
	BusinessActionBucketCreate BusinessAction = "bucket_create"
	BusinessActionBucketDelete BusinessAction = "bucket_delete"

	BusinessTypeBackupSetting                   BusinessType   = "backup_setting"
	BusinessTypeBackupSettingCreate             BusinessAction = "backup_setting_create"
	BusinessTypeBackupSettingModifyBucketRegion BusinessAction = "backup_setting_modify_bucket_region"

	BusinessTypeSnapshotBackup               BusinessType   = "snapshot_backup"
	BusinessActionSnapshotBackupCreate       BusinessAction = "snapshot_backup_create"
	BusinessActionSnapshotBackupDelete       BusinessAction = "snapshot_backup_delete"
	BusinessActionSnapshotBackupCleanStorage BusinessAction = "snapshot_backup_clean_storage"

	BusinessTypePitBackup          BusinessType   = "pit_backup"
	BusinessActionEnablePitBackup  BusinessAction = "enable_pit_backup"
	BusinessActionDisablePitBackup BusinessAction = "disable_pit_backup"
	BusinessActionRestartPitBackup BusinessAction = "restart_pit_backup"

	BusinessTypeRestore             BusinessType   = "restore"
	BusinessActionRestoreSnapshot   BusinessAction = "snapshot_restore"
	BusinessActionGcRestoreSnapshot BusinessAction = "gc_snapshot_restore"
	BusinessActionRestorePit        BusinessAction = "pit_restore"
	BusinessActionGcRestorePit      BusinessAction = "gc_pit_restore"

	BusinessTypeLogBackup         BusinessType   = "log_backup"
	BusinessActionLogBackupDelete BusinessAction = "log_backup_delete"

	BusinessTypeBizChangefeed         BusinessType   = "biz_changefeed"
	BusinessActionCreateBizChangefeed BusinessAction = "create_biz_changefeed"
	BusinessActionScaleBizChangefeed  BusinessAction = "scale_biz_changefeed"
	BusinessActionDeleteBizChangefeed BusinessAction = "delete_biz_changefeed"

	BusinessTypeCRRF          BusinessType   = "crrf"
	BusinessActionEnableCRRF  BusinessAction = "enable_crrf"
	BusinessActionDisableCRRF BusinessAction = "disable_crrf"
)

// ActionName dag action name
const (
	// bucket
	ActionCreateBucket                = "create_bucket"
	ActionCreateDefaultBucketPolicy   = "create_bucket_default_policy"
	ActionCreateBucketGCRule          = "create_bucket_gc_rule"
	ActionPutBucketDefaultTags        = "put_bucket_default_tags"
	ActionEnableBucketEncryption      = "enable_bucket_encryption"
	ActionEnableBucketVersioning      = "enable_bucket_versioning"
	ActionCreateBucketFinalStep       = "create_bucket_final_step"
	ActionCreateBucketGCP             = "create_bucket_gcp"
	ActionCreateBucketAzure           = "create_bucket_azure"
	ActionEnableBucketEncryptionAzure = "enable_bucket_encryption_azure"
	ActionCreateContainer             = "create_azure_container"

	// edit bucket settings
	ActionCreateAndCheckBucketReady    = "create_and_check_bucket_ready"
	ActionAddNodeRoleToBucketPolicy    = "add_node_role_to_bucket_policy"
	ActionCreateBackupSettingFinalStep = "create_bucket_setting_final_step"

	// action for delete bucket
	ActionDeleteBucketPreCheck        = "delete_bucket_pre_check"
	ActionDeleteBucketStopOtherDagIns = "delete_bucket_stop_other_dag_ins"
	ActionDeleteBucketDeleteFromAWS   = "delete_bucket_delete_from_aws"
	ActionDeleteBucketMarkDeleted     = "delete_bucket_delete_mark_deleted"
	ActionDeleteBucketGCP             = "delete_bucket_gcp"
	ActionDeleteBucketAzure           = "delete_bucket_azure"

	// action for enable dual region backup
	ActionCreateBucketReplication         = "create_bucket_replication"
	ActionModifyReplicationRTC            = "backup_setting_modify_replication_rtc"
	ActionModifyReplicationRTCFinalStep   = "backup_setting_modify_replication_rtc_final_step"
	ActionEnableDualRegionBucketFinalStep = "enable_dual_region_bucket_final_step"

	// action for disable dual region backup
	ActionDeleteBucketReplication          = "delete_bucket_replication"
	ActionDisableDualRegionBucketFinalStep = "disable_dual_region_bucket_final_step"

	// action for enable/ disable dual region backup when pit backup enabled
	ActionDisablePitBackup = "disable_pit_backup"
	ActionEnablePitBackup  = "enable_pit_backup"

	// action for backups
	ActionAddBucketPolicyForSnapshotBackup = "add_bucket_policy_for_snapshot_backup"
	ActionInitBackupConfig                 = "init_backup_config"
	ActionCreateSnapshotBackupCR           = "create_snapshot_backup_cr"
	ActionSyncSnapshotBackupCRStatus       = "sync_snapshot_backup_cr_status"
	ActionCleanFailedSnapshotBackupStorage = "clean_failed_snapshot_backup_storage"
	ActionSnapshotBackupCreationFinalStep  = "snapshot_backup_creation_final_step"

	ActionCancelUnfinishedSnapshotBackupCreationWorkflow = "cancel_unfinished_snapshot_backup_creation_workflow"
	ActionDeleteFinalStateSnapshotBackupWorkload         = "delete_final_state_snapshot_backup_workload"
	ActionDeleteSnapshotBackupWorkload                   = "delete_snapshot_backup_workload"
	ActionDeregisterBackupClusterJob                     = "deregister_backup_cluster_job"
	ActionCleanSnapshotBackupStorage                     = "clean_snapshot_backup_storage"

	ActionDeleteLogBackupWorkload = "delete_log_backup_workload"
	ActionCleanLogBackupStorage   = "clean_log_backup_storage"

	// action for CompactBackup
	ActionCreateCompactBackupTask = "create_compact_backup_task"
	ActionSyncCompactBackupStatus = "sync_compact_backup_status"
	// ActionCleanupCompactBackup deletes only the corresponding CompactBackup CR
	ActionCleanupCompactBackup         = "cleanup_compact_backup"
	ActionPurgeCompactionStorage       = "purge_compaction_storage"
	ActionDeleteCompactBackupFinalStep = "delete_compact_backup_final_step"

	// action for restores
	ActionCheckAndCreateClusterForRestoring = "check_and_create_cluster_for_restoring"
	ActionInitRestoreConfig                 = "init_restore_config"
	ActionAddBucketPolicyForRestoring       = "add_bucket_policy_for_restoring"
	ActionRunRestoring                      = "run_restoring"
	ActionRecycleBucketPolicyForRestoring   = "recycle_bucket_policy_for_restoring"
	ActionDeleteClusterJobForRestoring      = "delete_cluster_job_for_restoring"
	ActionRestoreSnapshotBackupFinalStep    = "restore_snapshot_backup_final_step"
	ActionRestoreSqlBindings                = "restore_sql_bindings"

	ActionCancelUnfinishedRestoreDagIns = "cancel_unfinished_restore_dag_ins"
	ActionDeleteRestoreInInfra          = "delete_restore_in_infra"
	ActionGcSnapshotRestoreFinalStep    = "gc_snapshot_restore_final_step"

	// action for restore pit backup
	ActionRunCompactBackupForPiTR   = "run_compact_backup_for_pitr"
	ActionDeleteCompactionForPiTR   = "delete_compaction_for_pitr"
	ActionRunPitRestoring           = "run_pit_restoring"
	ActionRestorePitBackupFinalStep = "restore_pit_backup_final_step"

	ActionCancelUnfinishedPitDagIns = "cancel_unfinished_pit_dag_ins"
	ActionGcPitRestoreFinalStep     = "gc_pit_restore_final_step"

	// action for PitBackups
	ActionStopGCForPitBackup                                 = "stop_gc_for_pit_backup"
	ActionDoSnapshotBackup                                   = "do_snapshot_backup"
	ActionStartLogBackup                                     = "start_log_backup"
	ActionStartGCforPitBackup                                = "start_gc_for_pit_backup"
	ActionUpdatePitBackupSwitchStatusFromEnablingToEnabled   = "update_pit_backup_switch_status_from_enabling_to_enabled"
	ActionUpdatePitBackupSwitchStatusFromRestartingToEnabled = "update_pit_backup_switch_status_from_restarting_to_enabled"

	ActionStopLogBackup                         = "stop_log_backup"
	ActionUpdatePitBackupSwitchStatusToDisabled = "update_pit_backup_switch_status_to_disabled"

	ActionPitBackupWaitingForBucketReady       = "pit_backup_waiting_for_bucket_ready"
	ActionUpdatePitBackupSettingStatusToNormal = "update_pit_backup_setting_status_to_normal"
	ActionPitBackupWaitingForLogBackupTsReady  = "pit_backup_waiting_for_log_backup_ts_ready"

	// action for crrf enable
	ActionCRRFEnableDualRegion = "crrf_enable_dual_region"
	ActionCRRFEnablePitr       = "crrf_enable_pitr"
	ActionCRRFEnableDaemon     = "crrf_enable_daemon"
	ActionCRRFMarkEnabled      = "crrf_mark_enabled"
	// action for crrf disable
	ActionCRRFDisableDaemon        = "crrf_disable_daemon"
	ActionCRRFModifyReplicationRTC = "crrf_modify_replication_rtc"
	ActionCRRFMarkDisabled         = "crrf_mark_disabled"
	// action shared by crrf enable and disable
	ActionCRRFTogglePeriodicBackup = "crrf_toggle_periodic_cluster_settings_backup"

	// Auto-CRRF action names — inserted into PiTR / PiTR-restart and dual-region-related flows.
	ActionAutoCRRFEnableFromPit         = "auto_crrf_enable_from_pit"
	ActionAutoCRRFDisableFromPit        = "auto_crrf_disable_from_pit"
	ActionAutoCRRFEnableFromDualRegion  = "auto_crrf_enable_from_dual_region"
	ActionAutoCRRFDisableFromDualRegion = "auto_crrf_disable_from_dual_region"

	// action for biz_changefeed
	ActionBizChangefeedCreateOrScaleTiCDCCluster  = "biz_changefeed_create_or_scale_ticdc_cluster"
	ActionBizChangefeedCreateChangefeed           = "biz_changefeed_create_changefeed"
	ActionBizChangefeedCreateFinalStep            = "biz_changefeed_create_final_step"
	ActionBizChangefeedScaleTiCDCCluster          = "biz_changefeed_scale_ticdc_cluster"
	ActionBizChangefeedScaleFinalStep             = "biz_changefeed_scale_final_step"
	ActionBizChangefeedCancelUnfinishedDagIns     = "biz_changefeed_delete_cancel_unfinished_dag_ins"
	ActionBizChangefeedDeleteChangefeed           = "biz_changefeed_delete_changefeed"
	ActionBizChangefeedDeleteOrScaleTiCDCCluster  = "biz_changefeed_delete_or_scale_ticdc_cluster"
	ActionBizChangefeedDeleteDeregisterClusterJob = "biz_changefeed_delete_deregister_cluster_job"
	ActionBizChangefeedDeleteFinalStep            = "biz_changefeed_delete_final_step"

	// action for biz private link
	ActionDeletePrivateLinkPreCheck    = "delete_private_link_delete_pre_check"
	ActionDeletePrivateLinkMarkDeleted = "delete_private_link_delete_mark_deleted"
	ActionDeleteResourcePrivateLink    = "delete_private_link"
	ActionDeleteDNSZone                = "delete_dns_zone"

	// workflow tags for tracking and monitoring
	TagClusterID       = "cluster_id"
	TagBackupID        = "backup_id"
	TagLogBackupID     = "log_backup_id"
	TagCompactBackupID = "compact_backup_id"
	TagUserID          = "user_id"
	TagProjectID       = "project_id"
)

// DagName dag name
const (
	DagCreateBucketAWS   = "create_bucket_aws_v1.0"
	DagDeleteBucketAWS   = "delete_bucket_aws_v1.0"
	DagCreateBucketGCP   = "create_bucket_gcp_v1.0"
	DagDeleteBucketGCP   = "delete_bucket_gcp_v1.0"
	DagCreateBucketAzure = "create_bucket_azure_v1.0"
	DagDeleteBucketAzure = "delete_bucket_azure_v1.0"

	DagConfigBucketForDefaultBackupSetting = "config_bucket_for_default_backup_setting_v1.0"
	DagEnableDualRegionBackupAWS           = "enable_dual_region_backup_aws_v1.0"
	DagDisableDualRegionBackupAWS          = "disable_dual_region_backup_aws_v1.0"
	DagToggleDualRegionBackupGCP           = "toggle_dual_region_backup_gcp_v1.0"

	DagCreateSnapshotBackup         = "create_snapshot_backup_v1.0"
	DagCreateWeeklySnapshotBackup   = "create_weekly_snapshot_backup_v1.0"
	DagDeleteSnapshotBackup         = "delete_snapshot_backup_v1.0"
	DagCleanupSnapshotBackupStorage = "cleanup_snapshot_backup_storage_v1.0"

	DagEnablePitBackup  = "enable_pit_backup_v1.0"
	DagDisablePitBackup = "disable_pit_backup_v1.0"
	DagRestartPitBackup = "restart_pit_backup_v1.0"

	DagEnableCRRF  = "enable_crrf_v1.0"
	DagDisableCRRF = "disable_crrf_v1.0"

	DagDeleteLogBackup = "delete_log_backup_v1.0"

	DagCreateCompactBackup = "create_compact_backup_v1.0"
	DagDeleteCompactBackup = "delete_compact_backup_v1.0"

	DagSnapshotRestore   = "snapshot_restore_v1.0"
	DagGcSnapshotRestore = "gc_snapshot_restore_v1.0"
	DagPitRestore        = "pit_restore_v1.0"
	DagGcPitRestore      = "gc_pit_restore_v1.0"

	DagCreateBizChangefeed = "create_biz_changefeed_v1.0"
	DagScaleBizChangefeed  = "scale_biz_changefeed_v1.0"
	DagDeleteBizChangefeed = "delete_biz_changefeed_v1.0"

	DagDeleteBizPrivateLink = "delete_biz_private_link"
)

// bucket dag vars key
const (
	KeyBucketID = "bucket_id"

	KeyBucketVersioningSwitch       = "bucket_versioning_switch"
	ValueBucketVersioningSwitchTrue = "true"

	KeyBucketEncryptionSwitch       = "bucket_encryption_switch"
	ValueBucketEncryptionSwitchTrue = "true"

	KeyBucketGCRuleSwitch       = "bucket_gc_rule_switch"
	ValueBucketGCRuleSwitchTrue = "true"
)

// edit bucket setting dag vars key
const (
	KeyBackupSettingId = "backup_setting_id"
	KeyRegion          = "region"
	KeySecondaryRegion = "secondary_region"
	KeyNetworkNodeRole = "network_node_role"

	KeyMasterBucketId    = "master_bucket_id"
	KeySecondaryBucketId = "secondary_bucket_id"
	KeyBucketPrefix      = "bucket_prefix"

	KeyCRRFSettingID = "crrf_setting_id"

	// KeySkipEnablePiTRDualRegion is passed to the enable_crrf DAG when CRRF is
	// triggered from within a PiTR or dual-region enable DAG. When "true", the
	// enable_pitr and enable_dual_region steps are no-ops (PiTR and dual-region
	// are already being set up by the calling DAG).
	KeySkipEnablePiTRDualRegion = "skip_enable_pitr_dual_region"

	SepBucketRegions = ","
)

// backup vars key
const (
	KeyBackupID             = "backup_id"
	KeyLogBackupID          = "log_backup_id"
	KeyDisableLogBackupID   = "disable_log_backup_id"
	KeyEnableLogBackupID    = "enable_log_backup_id"
	KeyPitBackupSwitchID    = "pit_backup_switch_id"
	KeyAsyncCreateBackupReq = "async_create_backup_req"
)

// restore vars key
const (
	KeyActionAddBucketPolicyForRestoringSwitch          = "add_bucket_policy_for_restoring_switch"
	ValueActionAddBucketPolicyForRestoringSwitchTrue    = "true"
	KeyActionDeleteBucketPolicyForRestoringSwitch       = "delete_bucket_policy_for_restoring_switch"
	ValueActionDeleteBucketPolicyForRestoringSwitchTrue = "true"

	KeyRestoreID            = "restore_id"
	KeyRestoreToClusterType = "restore_to_cluster_type"
)

// nodegroup dag vars key
const (
	KeyNodeGroupID             = "node_group_id"
	KeyAWSCreateNodeGroupParam = "aws_create_node_group_param"
)

// compact backup dag vars key
const (
	KeyCompactBackupID = "compact_backup_id"
)

// network connection dag vars key
const (
	KeyNetworkConnectionID = "network_connection_id"
)

// biz_changefeed dag vars key
const KeyBizChangefeedID = "biz_changefeed_id"

// Biz Private Link dag vars key
const (
	KeyBizPrivateLinkID = "biz_private_link_id"

	BusinessTypeBizPrivateLink         BusinessType   = "biz_private_link"
	BusinessActionBizPrivateLinkCreate BusinessAction = "biz_private_link_create"
	BusinessActionBizPrivateLinkDelete BusinessAction = "biz_private_link_delete"
)

// Add these constants for backup export
const (
	// DAG IDs
	DagCreateGCPBackupExport = "create_backup_export"
	DagCreateAWSBackupExport = "create_aws_backup_export"

	// Action IDs
	ActionGrantPermissionToGCPStorageTransferService = "grant_permission_to_gcp_storage_transfer_service"
	ActionGrantPermissionToAWSS3BatchOpsRole         = "grant_permission_to_aws_s3_batchops_role"
	ActionRevokePermissionFromAWSS3BatchOpsRole      = "revoke_permission_from_aws_s3_batchops_role"
	ActionCreateGCPStorageTransferJob                = "create_gcp_storage_transfer_job"
	ActionSyncGCPStorageTransferJobStatus            = "sync_gcp_storage_transfer_job_status"
	ActionCreateAWSS3BatchOpsJob                     = "create_aws_s3_batchops_job"
	ActionSyncAWSS3BatchOpsJobStatus                 = "sync_aws_s3_batchops_job_status"
	ActionBackupExportInitialStep                    = "backup_export_initial_step"
	ActionBackupExportFinalStep                      = "backup_export_final_step"

	// Context keys
	KeyBackupExportID = "backup_export_id"

	BusinessTypeBackupExport         BusinessType   = "backup_export"
	BusinessActionBackupExportCreate BusinessAction = "backup_export_create"
)
