package metrics

import (
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/config"
)

// Config holds the application configuration
type MetricsConfig struct {
	Clinic         config.ClinicConfig  `mapstructure:"clinic"`
	O11yConfig     O11yConfig           `mapstructure:"o11y"`
	CompareQuery   []MetricsQueryConfig `mapstructure:"compareQuery"`
	Feishu         FeishuConfig         `mapstructure:"feishu"`
	TnxQueries     []MetricsQueryConfig `mapstructure:"tnxQueries"`
	LatencyQueries []MetricsQueryConfig `mapstructure:"latencyQueries"`
	CPUResource    []MetricsQueryConfig `mapstructure:"CPUResource"`
	MEMResource    []MetricsQueryConfig `mapstructure:"MEMResource"`
	DiskQueries    []MetricsQueryConfig `mapstructure:"diskQueries"`
}

type FeishuConfig struct {
	DocumentID   DocumentConfig            `mapstructure:"documentID"`
	ReceiveID    ReceiveIDConfig           `mapstructure:"receiveID"`
	DocumentUrl  DocumentUrlConfig         `mapstructure:"documentUrl"`
	CardTemplate config.CardTemplateConfig `mapstructure:"cardTemplate"`
}

type DocumentConfig struct {
	Wetech DocumentModule `yaml:"wetech"`
	Bingo  DocumentModule `yaml:"bingo"`
	UE     DocumentModule `yaml:"ue"`
}

type DocumentModule struct {
	Dashboard string            `yaml:"dashboard"`
	BlockID   string            `yaml:"blockId"`
	Detail    map[string]string `yaml:"detail"`
}
type DocumentUrlConfig struct {
	WetechDocumentURL string `mapstructure:"wetch"`
	BingoDocumentURL  string `mapstructure:"bingo"`
	UEDocumentURL     string `mapstructure:"ue"`
}
type ReceiveIDConfig struct {
	WetechReceiveID []string `mapstructure:"wetech"`
	BingoReceiveID  []string `mapstructure:"bingo"`
	UEReceiveID     []string `mapstructure:"ue"`
}

type MetricsQueryConfig struct {
	Name         string
	PrimaryQuery string
}

type O11yConfig struct {
	Auth0TokenUrl     string `mapstructure:"auth0TokenUrl"`
	Auth0ClientId     string `mapstructure:"auth0ClientId"`
	Auth0ClientSecret string `mapstructure:"auth0ClientSecret"`
	Auth0Audience     string `mapstructure:"auth0Audience"`
	O11yMetadataBase  string `mapstructure:"o11yMetadataBase"`
}
