package query

import (
	"github.com/pingcap/dbaas/central/metrics/prom"
	"github.com/tidbcloud/metrics/internal/datasource"
	"github.com/tidbcloud/metrics/internal/datasource/central_thanos"
	"github.com/tidbcloud/metrics/internal/datasource/metadb"
	"github.com/tidbcloud/metrics/internal/datasource/shoot_prom"
)

func registryMetrics(client *prom.BasePromClient, clusterID uint64) (allMetricQueries []datasource.MetricQuerierFunc) {
	basePromQueryBuilder := shoot_prom.NewMetricQuerierBuilder(client)
	return []datasource.MetricQuerierFunc{
		central_thanos.BuildNodeMemoryUsedQuerier(clusterID, "", false),
		metadb.BuildNodeMemoryCapacityQuerier(clusterID, false),
		basePromQueryBuilder.BuildQueryRateQuerier(),
		basePromQueryBuilder.BuildFailedQueryRateQuerier(),
		basePromQueryBuilder.BuildQueryDurationQuerier(),
		basePromQueryBuilder.BuildCPUUsageCoresQuerier(),
		basePromQueryBuilder.BuildConnectionsQuerier(),
		basePromQueryBuilder.BuildStorageUsageBytesQuerier(),
		basePromQueryBuilder.BuildStorageCapacityBytesQuerier(),
	}
}

func registryClusterMetrics(client *prom.BasePromClient, clusterID uint64, clusterName string) []datasource.MetricQuerierFunc {
	return []datasource.MetricQuerierFunc{
		metadb.BuildNodeCPUCapacityCoresQuerier(clusterID),                        // tidbcloud_node_cpu_capacity_cores
		metadb.BuildNodeMemoryCapacityQuerier(clusterID, true),                    //tidbcloud_node_memory_capacity_bytes
		metadb.BuildNodeStorageCapacityQuerier(clusterID),                         // tidbcloud_node_storage_capacity_bytes
		central_thanos.BuildDBConnectionsQuerier(clusterID, clusterName),          // tidbcloud_db_connections_total
		central_thanos.BuildDBFailedQueriesTotalQuerier(clusterID, clusterName),   // tidbcloud_db_failed_queries_total
		central_thanos.BuildDBQueriesTotalQuerier(clusterID, clusterName),         // tidbcloud_db_queries_total
		central_thanos.BuildDBQueryDurationSecondsQuerier(clusterID, clusterName), // tidbcloud_db_query_duration_seconds
		central_thanos.BuildNodeCPUSecondsTotalQuerier(clusterID, clusterName),    // tidbcloud_node_cpu_seconds_total
		central_thanos.BuildNodeMemoryUsedQuerier(clusterID, clusterName, true),   // tidbcloud_node_memory_used_bytes
		central_thanos.BuildNodeStorageUsedBytesQuerier(clusterID, clusterName),   // tidbcloud_node_storage_used_bytes
	}
}
