package config

import (
	"log/slog"
	"os"
	"strconv"
)

var Version string

type App struct {
	// general config
	LogLevel string

	// configuration for server
	Prefork     bool
	Host        string
	Port        int
	ProxyHeader string
	AllowOrigin string

	// configuration for prober (client)
	ServerEndpoint string
	APIKey         string
	AcceptTor      bool
	TorSOCKS       string
	IPv6Capable    bool
}

func init() {
	if Version == "" {
		Version = "v0.0.0-alpha.0.000000.dev"
	}
}

var app = &App{}

func AppCfg() *App {
	return app
}

// loads App configuration
func LoadApp() {
	// general config
	app.LogLevel = os.Getenv("LOG_LEVEL")
	switch app.LogLevel {
	case "DEBUG":
		slog.SetLogLoggerLevel(slog.LevelDebug)
	case "ERROR":
		slog.SetLogLoggerLevel(slog.LevelError)
	case "WARN":
		slog.SetLogLoggerLevel(slog.LevelWarn)
	default:
		slog.SetLogLoggerLevel(slog.LevelInfo)
	}

	// server configuration
	app.Host = os.Getenv("APP_HOST")
	app.Port, _ = strconv.Atoi(os.Getenv("APP_PORT"))
	app.Prefork, _ = strconv.ParseBool(os.Getenv("APP_PREFORK"))
	app.ProxyHeader = os.Getenv("APP_PROXY_HEADER")
	app.AllowOrigin = os.Getenv("APP_ALLOW_ORIGIN")

	// prober configuration
	app.ServerEndpoint = os.Getenv("SERVER_ENDPOINT")
	app.APIKey = os.Getenv("API_KEY")
	app.AcceptTor, _ = strconv.ParseBool(os.Getenv("ACCEPT_TOR"))
	app.TorSOCKS = os.Getenv("TOR_SOCKS")
	app.IPv6Capable, _ = strconv.ParseBool(os.Getenv("IPV6_CAPABLE"))
}