package register

//
//import (
//	"bytes"
//	"fmt"
//	"github.com/nacos-group/nacos-sdk-go/v2/clients"
//	"github.com/nacos-group/nacos-sdk-go/v2/clients/config_client"
//	"github.com/nacos-group/nacos-sdk-go/v2/common/constant"
//	"github.com/nacos-group/nacos-sdk-go/v2/vo"
//	"github.com/spf13/viper"
//	"go.uber.org/zap"
//	"strconv"
//	"strings"
//)
//
//var group = ""
//
//func InitNacos(configFileName string) *viper.Viper {
//
//	v := parseAgentConfigFile(configFileName, nil)
//	group = v.GetString("spring.cloud.nacos.config.group")
//
//	// build the nacos connection
//	configClient := startNacosConnection(v)
//
//	// get all needed nacos config and merge
//	allNacosConfig := getAllNacosConfig(v, group, configClient)
//
//	for _, nacosConfigContent := range allNacosConfig {
//		log.Debug(fmt.Sprintf("nacos config conetent is %s", nacosConfigContent))
//
//		parseNacosConfigContend(nacosConfigContent, v)
//	}
//
//	log.Info(fmt.Sprintf("%s config read result are %v", configFileName, v.AllSettings()))
//
//	return v
//}
//
//func parseAgentConfigFile(configFileName string, v *viper.Viper) *viper.Viper {
//
//	// 使用Viper框架读取
//	if v == nil {
//		v = viper.New()
//	}
//
//	// 设置配置文件路径和名称
//	v.SetConfigName(configFileName)
//	v.AddConfigPath(".")
//	v.SetConfigType("yaml")
//
//	// 读取默认的总配置文件
//	err := v.ReadInConfig()
//	if err != nil {
//		panic(fmt.Errorf("fatal error config file: %s", err))
//	}
//
//	return v
//}
//
//func parseNacosConfigContend(configContent string, v *viper.Viper) *viper.Viper {
//
//	v.SetConfigType("yaml")
//
//	// use merge
//
//	err := v.MergeConfig(bytes.NewBuffer([]byte(configContent)))
//	if err != nil {
//		log.Error("nacos config contend read error !", zap.Error(err))
//	}
//
//	return v
//}
//func startNacosConnection(v *viper.Viper) config_client.IConfigClient {
//
//	serverAddr := v.GetString("spring.cloud.nacos.config.server-addr")
//
//	clientConfig := constant.ClientConfig{
//		//Endpoint: serverAddr,
//		NamespaceId:          "",
//		TimeoutMs:            v.GetUint64("spring.cloud.nacos.config.timeout"),
//		NotLoadCacheAtStart:  true,
//		AppendToStdout:       true,
//		UpdateCacheWhenEmpty: true,
//		//LogDir:              "/tmp/nacos/log",
//		//CacheDir:            "/tmp/nacos/cache",
//		Username: "nacos",
//		Password: "Superwmm.23",
//	}
//
//	split := strings.Split(serverAddr, ":")
//	if len(split) != 2 {
//		log.Error("nacos server addr error!")
//	}
//
//	port, _ := strconv.ParseUint(split[1], 10, 64)
//	serverConfigs := []constant.ServerConfig{
//		{
//			IpAddr:   split[0],
//			Port:     port,
//			GrpcPort: port + 1000,
//		},
//	}
//
//	// Another way of create config client for dynamic configuration (recommend)
//	configClient, err := clients.NewConfigClient(
//		vo.NacosClientParam{
//			ClientConfig:  &clientConfig,
//			ServerConfigs: serverConfigs,
//		},
//	)
//	if err != nil {
//		panic(err)
//	}
//
//	return configClient
//}
//
//func getAllNacosConfig(v *viper.Viper, group string, configClient config_client.IConfigClient) []string {
//
//	result := make([]string, 0)
//
//	// main nacos configs
//	mainNacosConfigFileName := v.GetString("spring.application.name") + "-" + v.GetString("spring.profiles.active") + "." + v.GetString("spring.cloud.nacos.config.file-extension")
//
//	log.Debug(fmt.Sprintf("main nacos config file name is %s", mainNacosConfigFileName))
//	configContent := getConfig(mainNacosConfigFileName, group, configClient)
//	result = append(result, configContent)
//
//	// additional nacos config
//	additionalNacosConfig := v.Get("spring.cloud.nacos.config.extension-configs")
//	// 增加断言，判定map的类型
//	m, ok := additionalNacosConfig.([]interface{})
//	if !ok {
//		fmt.Println("additionalNacosConfig is not a slice")
//		return nil
//	}
//
//	for _, addConfigMap := range m {
//
//		realMap, _ := addConfigMap.(map[string]interface{})
//
//		// 拿到配置的Key
//		dataId := realMap["data-id"].(string)
//		group := realMap["group"].(string)
//
//		// 查询
//		config := getConfig(dataId, group, configClient)
//		result = append(result, config)
//	}
//
//	return result
//}
//
//// getConfig 从Nacos中获取相应的
//func getConfig(dataId string, group string, configClient config_client.IConfigClient) string {
//
//	log.Debug(fmt.Sprintf("nacos config get method dataID is %s, group is %s", dataId, group))
//
//	content, err := configClient.GetConfig(vo.ConfigParam{
//		DataId: dataId,
//		Group:  group,
//	})
//	if err != nil {
//		log.Error("nacos config get error !", zap.Error(err))
//	}
//
//	log.Debug(fmt.Sprintf("dataId %s , group %s, nacos config content is %s", dataId, group, content))
//
//	return content
//}
