package config import ( "os" "strings" "github.com/spf13/pflag" ) type Config struct { Port string DBPath string TargetConfig string FilterConfig string LogLevel string LLMProvider string // "gemini", "deepseek", "mock" GeminiAPIKey string DeepSeekAPIKey string DeepSeekBaseURL string } func RegisterFlags(flags *pflag.FlagSet) *Config { cfg := &Config{} flags.StringVarP(&cfg.Port, "port", "p", getEnvOrDefault("PORT", "8080"), "HTTP server port") flags.StringVarP(&cfg.DBPath, "db", "d", getEnvOrDefault("DB_PATH", "data/db/hireme.db"), "Path to database file") flags.StringVarP(&cfg.TargetConfig, "target-config", "c", getEnvOrDefault("TARGET_CONFIG", "data/config/targets.yaml"), "Path to targets YAML file") flags.StringVarP(&cfg.FilterConfig, "filter-config", "f", getEnvOrDefault("FILTER_CONFIG", "data/config/filters.yaml"), "Path to filters YAML file") flags.StringVar(&cfg.LogLevel, "log-level", getEnvOrDefault("LOG_LEVEL", "info"), "Logging level (trace, debug, info, error)") flags.StringVarP(&cfg.LLMProvider, "llm-provider", "l", getEnvOrDefault("LLM_PROVIDER", ""), "Active LLM Provider (gemini, deepseek, mock)") flags.StringVar(&cfg.GeminiAPIKey, "gemini-api-key", os.Getenv("GEMINI_API_KEY"), "Gemini API Key") flags.StringVar(&cfg.DeepSeekAPIKey, "deepseek-api-key", os.Getenv("DEEPSEEK_API_KEY"), "DeepSeek API Key") flags.StringVar(&cfg.DeepSeekBaseURL, "deepseek-base-url", getEnvOrDefault("DEEPSEEK_BASE_URL", "https://api.deepseek.com"), "DeepSeek Base URL") return cfg } func (c *Config) Normalize() { if c.LLMProvider == "" { if c.GeminiAPIKey != "" { c.LLMProvider = "gemini" } else if c.DeepSeekAPIKey != "" { c.LLMProvider = "deepseek" } else { c.LLMProvider = "mock" } } c.LLMProvider = strings.ToLower(c.LLMProvider) } func getEnvOrDefault(key, defaultValue string) string { val := os.Getenv(key) if val != "" { return val } return defaultValue }