package constant

import "strings"

const (
	Success = "Success"
	Failed  = "Failed"
)

const (
	// PatternName
	PatternHugeResourceUsage           = "HugeResourceUsage"
	PatternHugeResourceUsageSubLatency = "Latency"
	PatternFailed                      = "Failed"
	PatternTableFullScan               = "TableFullScan"
	PatternIndexFullScan               = "IndexFullScan"
	PatternDeepOffset                  = "DeepOffset"
	PatternExcessiveCopTask            = "ExcessiveCopTask"
	PatternStatsMissing                = "StatsMissing"
	PatternTiflashScanRegionImbalance  = "TiflashScanRegionImbalance"
	PatternSendResponseSlow            = "SendResponseSlow"
)

//o11y const
// const (
// 	DeployTypePremium  = "premium"
// 	DeployTypeDedicated = "dedicated"
// 	ProviderAliCloud    = "aliyun"
// 	ProviderAWS         = "aws"

// )

type Provider string
type BizType string
type ApplicationID string

const (
	DeployTypePremium                   = "premium"
	DeployTypeDedicated                 = "dedicated"
	ProviderAWS           Provider      = "aws"
	ProviderGCP           Provider      = "gcp"
	ProviderAliCloud      Provider      = "alicloud"
	BizTypeTidbCloud      BizType       = "tidbcloud"
	BizTypeNextGen        BizType       = "prod-tidbcloud-nextgen"
	ApplicationIDK8sInfra ApplicationID = "k8s-infra"
)

func (v Provider) IsValid() bool      { return v == ProviderAWS || v == ProviderAliCloud }
func (b BizType) IsValid() bool       { return b == BizTypeTidbCloud || b == BizTypeNextGen }
func (a ApplicationID) IsValid() bool { return a != "" }

// DataPlaneMetrics 需要通过 DataPlane Prometheus 端点查询的指标名称
var DataPlaneMetrics = []string{
	"node_memory_MemTotal_bytes",
	"node_memory_MemFree_bytes",
	"node_memory_Buffers_bytes",
	"node_memory_Cached_bytes",
	"node_disk_read_time_seconds_total",
	"node_disk_reads_completed_total",
	"node_disk_write_time_seconds_total",
	"node_disk_writes_completed_total",
	"kube_pod_info",
	"aws_ebs_csi_exceeded_iops_seconds_total",
}

// IsDataPlaneQuery 判断 PromQL 查询是否包含 DataPlane 指标
func IsDataPlaneQuery(promQL string) bool {
	for _, metric := range DataPlaneMetrics {
		if strings.Contains(promQL, metric) {
			return true
		}
	}
	return false
}
