package config
import (
"flag"
"time"
"k8s.io/klog/v2"
)
// Config holds all application configuration derived from flags.
type Config struct {
Port uint
NodeID string
RESTPort uint
SnapshotFile string
ConfigDir string
DBConnStr string
EnableCertIssuance bool
WebrootPath string
CertCheckInterval time.Duration
}
// Global configuration variable.
var cfg Config
// InitFlags initializes and binds all command-line flags.
func InitFlags() {
klog.InitFlags(nil)
flag.UintVar(&cfg.Port, "port", 18000, "xDS management server port")
flag.StringVar(&cfg.NodeID, "node-id", "test-id", "Node ID")
flag.UintVar(&cfg.RESTPort, "rest-port", 8080, "REST API server port")
flag.StringVar(&cfg.SnapshotFile, "snapshot-file", "", "Optional initial snapshot JSON/YAML file")
flag.StringVar(&cfg.ConfigDir, "config-dir", "data/config", "Optional directory containing multiple config files")
flag.StringVar(&cfg.DBConnStr, "db", "", "Optional database connection string for config persistence")
flag.BoolVar(&cfg.EnableCertIssuance, "enable-cert-issuance", false, "Enable Let's Encrypt certificate issuance on startup")
flag.StringVar(&cfg.WebrootPath, "webroot-path", "data/acme", "Local path to serve the HTTP-01 challenge file (required if enabled)")
flag.DurationVar(&cfg.CertCheckInterval, "cert-check-interval", 1*time.Hour, "Interval for checking certificate expiration and renewing if necessary")
}
// GetConfig returns the application configuration.
func GetConfig() *Config {
return &cfg
}