package config

import (
	"fmt"
	_ "github.com/joho/godotenv/autoload"
	"log"
	"os"
)

type Config struct {
	AppEnv     string
	DbUrl      string
	ServerPort string
}

func Load() Config {
	var dbUrl string
	{
		username := getEnv("DB_USERNAME")
		password := getEnv("DB_PASSWORD")
		name := getEnv("DB_NAME")
		port := getEnv("DB_PORT")
		host := getEnv("DB_HOST")

		// postgres://admin:admin@localhost:5432/admin_db
		dbUrl = fmt.Sprintf("postgres://%v:%v@%v:%v/%v?sslmode=disable", username, password, host, port, name)
	}

	appEnv := os.Getenv("APP_ENV") // development | production
	if appEnv == "" {
		appEnv = "development"
	}

	cfg := Config{
		AppEnv:     appEnv,
		DbUrl:      dbUrl,
		ServerPort: "8080",
	}

	return cfg

}

func getEnv(key string) string {
	v := os.Getenv(key)
	if v == "" {
		log.Fatalf("The env variable %v is not defined and the applciation can not operate without\n", key)
	}
	return v
}

func Provide() *Config {
	cfg := Load()
	return &cfg
}
