package global

import "github.com/spf13/viper"

type Settings struct {
	vp *viper.Viper
}

var sections = make(map[string]interface{})

// NewSetting 读取配置
func NewSetting() (*Settings, error) {
	vp := viper.New()
	vp.SetConfigName("config")
	vp.AddConfigPath("configs")
	vp.SetConfigType("yaml")
	err := vp.ReadInConfig()
	if err != nil {
		return nil, err
	}
	s := &Settings{vp}
	return s, nil
}

// ReadSection 读取指定的一段
func (s *Settings) ReadSection(k string, v interface{}) error {
	err := s.vp.UnmarshalKey(k, v)
	if err != nil {
		return err
	}
	if _, ok := sections[k]; !ok {
		sections[k] = v
	}
	return nil
}

// ReloadAllSection 重新加载
func (s *Settings) ReloadAllSection() error {
	for k, v := range sections {
		err := s.ReadSection(k, v)
		if err != nil {
			return err
		}
	}
	return nil
}
