package constant

import "strings"

const (
	StatusUnsynced = "unsynced"
	StatusSynced   = "synced"

	TypeSpendLimit = "spend_limit"
	TypeCanary     = "canary"

	CanaryPoolPrefix          = "canary-"
	CanaryPoolMarkedFlag      = "true"
	CanaryPoolUnmarkedFlag    = "false"
	AnnoKeyPrefix             = "free-tier.tidbcloud.com"
	AnnoTidbPoolSelector      = AnnoKeyPrefix + "/tidb-pool-selector"
	AnnoRuLimitMode           = AnnoKeyPrefix + "/ru-limit-mode"
	AnnoKeyKeyspaceRestore    = AnnoKeyPrefix + "/keyspace-restore-status"
	AnnoKeyspaceRestoreStart  = "RestoreStart"
	AnnoKeyspaceRestoreFinish = "RestoreFinish"
	AnnoCanary                = AnnoKeyPrefix + "/canary"
	AnnoServicePlan           = AnnoKeyPrefix + "/service-plan"
	AnnoTenantPlan            = AnnoKeyPrefix + "/tenant-plan"

	AnnoKeyEnableCustomerAlert = AnnoKeyPrefix + "/enable-customer-alert"

	LabelKeyProviderType = "cloud.pingcap.com/provider-type"
	LabelKeyKubernetes   = "tags.tidbcloud.com/kubernetes"
	LabelKeyRegion       = "cloud.pingcap.com/region"
	LabelProject         = "tags.tidbcloud.com/project"
	LabelTestNamespace   = "cloud.pingcap.com/test-namespace"

	ProviderTypeAWSFreeTier      = "aws-free-tier"
	ProviderTypeAliCloudFreeTier = "alicloud-free-tier"
	ProviderTypeGCPFreeTier      = "gcp-free-tier"
	IndexFieldTidbPool           = "status.fromProvider.tidbPool"

	AnnoRestoreStatusKey           = AnnoKeyPrefix + "/keyspace-restore-status"
	AnnoRestoreStatusStart         = "RestoreStart"
	AnnoRestoreStatusRestartTiDB   = "RestoreRestartTiDB"
	AnnoRestoreStatusRestoreFinish = "RestoreFinish"
	// AnnoKeyRestoreToNewCluster used by restoring to new cluster
	AnnoKeyRestoreToNewCluster = AnnoKeyPrefix + "/restore-to-new-cluster"
	// AnnoKeyRestoreToNewClusterWait wait for restore(executed in control plane)
	AnnoKeyRestoreToNewClusterWait = "RestoreWait"
	// AnnoKeyRestoreToNewClusterFinish restore has finished
	AnnoKeyRestoreToNewClusterFinish = "RestoreFinish"
	LabelCreateFromRestore           = "tags.tidbcloud.com/create-from-restore"

	AnnoExportSuperVip = "export.tidbcloud.com/super-vip"
)

const CloudAdminUsername = "cloud_admin"

// follow https://github.com/tidbcloud/dataservices/blob/16a450b4cc18360c92c6cf316842f55b6cb127bf/internal/service/central/query.go#L34
var ExcludeDatabases = []string{
	"__TiDB_BR_Temporary_mysql",
	"tidbcloud_dm_meta",
	"tidb_cdc",
	"lightning_task_info",
	"INFORMATION_SCHEMA",
	"mysql",
	"PERFORMANCE_SCHEMA",
	"METRICS_SCHEMA",
}

// FreeTierProviderType maps a cloud provider name (aws/gcp/alicloud) to the
// k8s provider-type label used by serverless dataplane CRs.
func FreeTierProviderType(cloudProvider string) string {
	switch cloudProvider {
	case "", "aws":
		return ProviderTypeAWSFreeTier
	case "alicloud":
		return ProviderTypeAliCloudFreeTier
	case "gcp":
		return ProviderTypeGCPFreeTier
	default:
		return cloudProvider + "-free-tier"
	}
}

// AllFreeTierProviderTypes is the label set watched by the infra manager
// cache for serverless Import/Export/Branch CRs.
func AllFreeTierProviderTypes() []string {
	return []string{
		ProviderTypeAWSFreeTier,
		ProviderTypeAliCloudFreeTier,
		ProviderTypeGCPFreeTier,
	}
}

func IntoCanaryPool(poolName string) string {
	if strings.HasPrefix(poolName, CanaryPoolPrefix) {
		return poolName
	}
	return CanaryPoolPrefix + poolName
}

func OutOfCanaryPool(poolName string) string {
	return strings.TrimPrefix(poolName, CanaryPoolPrefix)
}
