package config

import "time"

type Config struct {
	HTTP    httpConfig
	Redis   redisConfig
	Nats    natsConfig
	Metrics metricsConfig

	LogLevel string `envconfig:"LOG_LEVEL" default:"INFO"`
}

type httpConfig struct {
	Host         string        `envconfig:"HTTP_HOST"`
	Port         string        `envconfig:"HTTP_PORT" default:"8080"`
	IdleTimeout  time.Duration `envconfig:"HTTP_IDLE_TIMEOUT" default:"120s"`
	ReadTimeout  time.Duration `envconfig:"HTTP_READ_TIMEOUT" default:"10s"`
	WriteTimeout time.Duration `envconfig:"HTTP_WRITE_TIMEOUT" default:"10s"`
}

type redisConfig struct {
	Addr string        `envconfig:"REDIS_ADDR" required:"true"`
	User string        `envconfig:"REDIS_USER" required:"true"`
	Pass string        `envconfig:"REDIS_PASS" required:"true"`
	DB   int           `envconfig:"REDIS_DB" default:"0"`
	TTL  time.Duration `envconfig:"REDIS_EXPIRATION"` //  no default expiration, keys are set to live forever
}

type natsConfig struct {
	Addr    string `envconfig:"NATS_ADDR" required:"true"`
	Subject string `envconfig:"NATS_SUBJECT" default:"external"`
}

type metricsConfig struct {
	Addr string `envconfig:"METRICS_ADDR" default:":2112"`
}