package utils

import (
	"github.com/prometheus/common/log"
	"github.com/spf13/viper"
	"os"
	"time"
)

var (
	Params *viper.Viper
)

func InitCLI() {
	Params = viper.New()
	setDefaults()
	Params.SetConfigName("config")
	Params.SetConfigType("yml")
	Params.AddConfigPath(".")
	err := Params.ReadInConfig()
	if err != nil {
		log.Debugf("config.yml Fatal error config file: %s", err)
	}

	Params.AddConfigPath(".")
	Params.SetConfigFile(".env")
	err = Params.ReadInConfig()
	if err != nil {
		log.Debugf(".env Fatal error config file: %s", err)
	}

	Params.AutomaticEnv()
	if err != nil {
		log.Debugf("No environment variables found: %s", err)
	}
}

func setDefaults() {
	defaultDir, err := os.Getwd()
	if err != nil {
		defaultDir = "."
	}
	Params.SetDefault("STATPING_DIR", defaultDir)
	Directory = Params.GetString("STATPING_DIR")
	Params.SetDefault("GO_ENV", "")
	Params.SetDefault("DISABLE_LOGS", false)
	Params.SetDefault("BASE_PATH", "")
	Params.SetDefault("MAX_OPEN_CONN", 25)
	Params.SetDefault("MAX_IDLE_CONN", 25)
	Params.SetDefault("MAX_LIFE_CONN", 5*time.Minute)
	Params.SetDefault("SAMPLE_DATA", true)
	Params.SetDefault("USE_CDN", false)
	Params.SetDefault("ALLOW_REPORTS", false)
	Params.SetDefault("AUTH_USERNAME", "")
	Params.SetDefault("AUTH_PASSWORD", "")
	Params.SetDefault("POSTGRES_SSLMODE", "disable")

	dbConn := Params.GetString("DB_CONN")
	dbInt := Params.GetInt("DB_PORT")
	if dbInt == 0 && dbConn != "sqlite" && dbConn != "sqlite3" {
		if dbConn == "postgres" {
			Params.SetDefault("DB_PORT", 5432)
		}
		if dbConn == "mysql" {
			Params.SetDefault("DB_PORT", 3306)
		}
	}
}