package config

import (
	"github.com/spf13/viper"
	"io/fs"
	"os"
	"path/filepath"
	"strings"
)

func LoadConfig(v *viper.Viper, cfg interface{}) (interface{}, error) {
	//v.SetDefault("HTTP_PORT", "9009")
	v.AutomaticEnv()

	if _, err := os.Stat(".env"); err == nil {
		v.SetConfigFile(".env")
		v.AddConfigPath(".")
		_ = v.MergeInConfig()
	}

	if _, err := os.Stat("./secrets"); err == nil {
		_ = filepath.Walk("./secrets", func(path string, info fs.FileInfo, err error) error {
			if strings.HasPrefix(info.Name(), ".env") {
				v.SetConfigFile("./secrets/" + info.Name())
				v.SetConfigType("env")
				_ = v.MergeInConfig()
			}
			return nil
		})
	}

	if err := v.Unmarshal(&cfg); err != nil {
		return nil, err
	}
	return cfg, nil
}
