package common

import (
	"fmt"
	"sync"

	"github.com/spf13/viper"
)

type Config struct {
	Service      Service `mapstructure:"service" json:"service"` // 服务配置
	MysqlService Mysql   `mapstructure:"mysql_service" json:"mysql_service"`
}

type Service struct {
	Sites map[string]SiteConfig `mapstructure:"site" json:"site"`
}

type SiteConfig struct {
	UnauthURI string `mapstructure:"unauth_uri" json:"unauth_uri"`
}

type Mysql struct {
	Server   string `mapstructure:"server" json:"server"`
	Port     string `mapstructure:"port" json:"port"`
	Database string `mapstructure:"database" json:"database"`
	Username string `mapstructure:"username" json:"username"`
	Password string `mapstructure:"password" json:"password"`
}

var (
	cfg      Config
	loadOnce sync.Once
)

func LoadConfig() Config {
	loadOnce.Do(func() {
		var configPath = getConfigPath()
		viper.SetConfigType("yaml")
		viper.SetConfigFile(configPath)
		err := viper.ReadInConfig()
		if err != nil {
			panic(fmt.Errorf("read file failed err:%v,file:%s", err, configPath))
		}
		err = viper.Unmarshal(&cfg)
		if err != nil {
			panic(fmt.Errorf("errpr viper.Unnarshal err:%v,file:%s", err, configPath))
		}
	})
	return cfg
}

func GetMysqlConfig() Mysql {
	return cfg.MysqlService
}

func GetServiceConfig() Service {
	return cfg.Service
}
