Files
2026-06-18 21:41:47 +01:00

50 lines
1.4 KiB
Go

package main
import (
"encoding/json"
"fmt"
"os"
)
// Config holds the web-only proof-of-concept server settings plus invoice
// defaults. It is read at startup only; edits made on the Settings page are
// kept in memory and are reset with the rest of the POC data every 10 minutes.
type Config struct {
// Where the web server listens. Caddy can reverse-proxy to this.
ListenAddr string `json:"listen_addr"`
// Invoice / company details (editable in Settings for the current in-memory run).
CompanyName string `json:"company_name"`
CompanyAddress string `json:"company_address"`
CompanyPhone string `json:"company_phone"`
CompanyEmail string `json:"company_email"`
CompanyWeb string `json:"company_web"`
TaxID string `json:"tax_id"`
BankInfo string `json:"bank_info"`
PaymentTermsDays int `json:"payment_terms_days"`
MVGPercent float64 `json:"mvg_percent"`
}
func loadConfig(path string) (Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return Config{}, fmt.Errorf("cannot read config %s: %w", path, err)
}
var cfg Config
if err := json.Unmarshal(data, &cfg); err != nil {
return Config{}, fmt.Errorf("cannot parse config: %w", err)
}
if cfg.ListenAddr == "" {
cfg.ListenAddr = "127.0.0.1:8081"
}
if cfg.PaymentTermsDays <= 0 {
cfg.PaymentTermsDays = 8
}
if cfg.MVGPercent <= 0 {
cfg.MVGPercent = 25
}
return cfg, nil
}