package config import ( "os" ) type Config struct { Env string Port string DBName string DBUser string DBPassword string DBPort string DBHost string RedisHost string RedisPort string RedisUser string RedisPassword string JWTSecret string NatsURL string NatsUser string NatsPassword string AILayerBaseURL string // AI decision-engine service base URL (e.g. http://rider-api:8082) // RouteOptimizerURL is the Route Optimization API that orders a rider's // stops (Valhalla-backed road sequencing). Empty disables sequencing: stops // stay unordered rather than assignment failing. RouteOptimizerURL string // TrustedProxies is a comma-separated list of reverse-proxy IPs/CIDRs that // are allowed to set X-Forwarded-For. Rate limiting keys on the client IP, // so behind a proxy this MUST be set — otherwise every request appears to // come from the proxy and the whole fleet shares one limit bucket. // Empty means "no proxy": the socket peer address is used as-is. TrustedProxies string SMTPHost string SMTPPort string SMTPUser string SMTPPassword string SMTPFrom string } func Load() *Config { return &Config{ Env: getEnv("ENV", "development"), Port: getEnv("APP_PORT", "8081"), DBName: getEnv("DB_NAME", "logistics"), DBUser: getEnv("DB_USER", "admin"), DBPassword: getEnv("DB_PASSWORD", "Package@321#"), DBPort: getEnv("DB_PORT", "5433"), DBHost: getEnv("DB_HOST", "127.0.0.1"), RedisHost: getEnv("REDIS_HOST", "127.0.0.1"), RedisPort: getEnv("REDIS_PORT", "6379"), RedisUser: getEnv("REDIS_USER", ""), RedisPassword: getEnv("REDIS_PASSWORD", ""), JWTSecret: getEnv("JWT_SECRET_KEY", "DoormileSuperSecretJWTKey2026!"), NatsURL: getEnv("NATS_URL", "nats://66.116.226.161:4223"), NatsUser: getEnv("NATS_USER", "doormile"), NatsPassword: getEnv("NATS_PASSWORD", "Package@321#"), AILayerBaseURL: getEnv("AI_LAYER_BASE_URL", "https://routemate.workolik.com"), RouteOptimizerURL: getEnv("ROUTE_OPTIMIZER_URL", "https://routes.workolik.com"), TrustedProxies: getEnv("TRUSTED_PROXIES", ""), SMTPHost: getEnv("SMTP_HOST", ""), SMTPPort: getEnv("SMTP_PORT", "465"), SMTPUser: getEnv("SMTP_USER", ""), SMTPPassword: getEnv("SMTP_PASSWORD", ""), SMTPFrom: getEnv("SMTP_FROM", ""), } } func getEnv(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback }