package config import ( "errors" "os" ) // Config holds runtime configuration for the Home Assistant gRPC gateway. type Config struct { GRPCPort string // GRPC_PORT, default "50051" HABaseURL string // HA_BASE_URL, e.g. "http://ha.home.arpa:8123" HAToken string // HA_TOKEN — long-lived access token (required) OTELEndpoint string // OTEL_ENDPOINT, e.g. "otel-collector.monitoring.svc:4317" LogLevel string // LOG_LEVEL, default "info" LogFormat string // LOG_FORMAT, default "json" // empty = telemetry disabled (local dev default) } // Load reads configuration from environment variables and applies defaults. func Load() (*Config, error) { token := os.Getenv("HA_TOKEN") if token == "" { return nil, errors.New("HA_TOKEN is required but not set") } port := os.Getenv("GRPC_PORT") if port == "" { port = "50051" } return &Config{ GRPCPort: port, HABaseURL: os.Getenv("HA_BASE_URL"), HAToken: token, OTELEndpoint: os.Getenv("OTEL_ENDPOINT"), LogLevel: getenvDefault("LOG_LEVEL", "info"), LogFormat: getenvDefault("LOG_FORMAT", "json"), }, nil } // getenvDefault keeps config loading concise for optional variables with defaults. func getenvDefault(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback }