package timewarrior import ( "fmt" "log/slog" "strings" ) type TWConfig struct { config map[string]string } var ( defaultConfig = map[string]string{ "uda.timesquire.default.tag": "", } ) func NewConfig(config []string) *TWConfig { cfg := parseConfig(config) for key, value := range defaultConfig { if _, ok := cfg[key]; !ok { cfg[key] = value } } return &TWConfig{ config: cfg, } } func (tc *TWConfig) GetConfig() map[string]string { return tc.config } func (tc *TWConfig) Get(key string) string { if _, ok := tc.config[key]; !ok { slog.Debug(fmt.Sprintf("Key not found in config: %s", key)) return "" } return tc.config[key] } func parseConfig(config []string) map[string]string { configMap := make(map[string]string) for _, line := range config { // Skip empty lines and comments line = strings.TrimSpace(line) if line == "" || strings.HasPrefix(line, "#") { continue } // Timewarrior config format: key = value or key: value var key, value string if strings.Contains(line, "=") { parts := strings.SplitN(line, "=", 2) if len(parts) == 2 { key = strings.TrimSpace(parts[0]) value = strings.TrimSpace(parts[1]) } } else if strings.Contains(line, ":") { parts := strings.SplitN(line, ":", 2) if len(parts) == 2 { key = strings.TrimSpace(parts[0]) value = strings.TrimSpace(parts[1]) } } if key != "" { configMap[key] = value } } return configMap }