package config import ( "fmt" "log/slog" "os" "reflect" "text/tabwriter" "time" "github.com/joho/godotenv" ) // LoadConfig загружает конфиг из .env (если есть) и окружения. func LoadConfig(logger *slog.Logger) (*Config, error) { _ = godotenv.Load() cfg := &Config{} cfg.ListenAddr = GetEnvAs("LISTEN_ADDR", ":8080", ParseString) cfg.BackendURL = GetEnvAs("OLLAMA_BACKEND", "http://localhost:11434", ParseString) cfg.LoggingConfig.Instance = logger cfg.LoggingConfig.Level = GetEnvAs("LOG_LEVEL", "info", ParseString) cfg.LoggingConfig.ShowCfgDump = GetEnvAs("LOG_SHOW_DUMP", false, ParseBool) if cfg.LoggingConfig.ShowCfgDump { cfg.Print() } return cfg, nil } // Print выводит конфигурацию в виде таблички "KEY - VALUE". func (c *Config) Print() { w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) fmt.Fprintln(w, "Loaded configuration:") fmt.Fprintln(w, "KEY\tVALUE") fmt.Fprintln(w, "----\t-----") v := reflect.ValueOf(c) if v.Kind() == reflect.Ptr { v = v.Elem() } t := v.Type() for i := 0; i < v.NumField(); i++ { fieldName := t.Field(i).Name fieldValue := v.Field(i).Interface() if d, ok := fieldValue.(time.Duration); ok { fieldValue = d.String() } fmt.Fprintf(w, "%s:\t%v\n", fieldName, fieldValue) } fmt.Fprintln(w, "----\t-----") w.Flush() }