package config

import (
	"os"
)

type (
	Config struct {
		DbUrl                  string
		ListenAddr             string
		LogLevel               string
		MatrixIdentityServer   string
		MatrixMsc3575Address   string
		MatrixWellKnownAddress string
		RelayName              string
		RelayPubkey            string
		RelayDescription       string
		RelayIcon              string
		RelayContact           string
		AlbyAdminAuth          string
	}
)

func GetConfig() Config {
	return Config{
		DbUrl:                  getEnv("DATABASE_URL", "postgres://user:password@127.0.0.1:5432/db?sslmode=disable"),
		ListenAddr:             getEnv("LISTEN_ADDR", ":8090"),
		LogLevel:               getEnv("LOG_LEVEL", "INFO"),
		MatrixIdentityServer:   getEnv("MATRIX_IDENTITY_SERVER", ""),
		MatrixMsc3575Address:   getEnv("MATRIX_MSC3575_ADDRESS", ""),
		MatrixWellKnownAddress: getEnv("MATRIX_WELL_KNOWN_ADDRESS", ""),
		RelayName:              getEnv("RELAY_NAME", ""),
		RelayPubkey:            getEnv("RELAY_PUBKEY", ""),
		RelayDescription:       getEnv("RELAY_DESCRIPTION", ""),
		RelayIcon:              getEnv("RELAY_ICON", ""),
		RelayContact:           getEnv("RELAY_CONTACT", ""),
		AlbyAdminAuth:          getEnv("ALBY_ADMIN_AUTH", ""),
	}
}

func getEnv(key, fallback string) string {
	if value, ok := os.LookupEnv(key); ok {
		return value
	}
	return fallback
}