package services import ( "encoding/json" "os" "path/filepath" "sync" "time" "arma3-web-server/internal/models" ) type SettingsManager struct { path string mu sync.Mutex } func NewSettingsManager(dataDir string) *SettingsManager { return &SettingsManager{ path: filepath.Join(dataDir, "settings.json"), } } func (sm *SettingsManager) Load() (*models.ServerSettings, error) { sm.mu.Lock() defer sm.mu.Unlock() data, err := os.ReadFile(sm.path) if err != nil { if os.IsNotExist(err) { return sm.defaults(), nil } return nil, err } var s models.ServerSettings if err := json.Unmarshal(data, &s); err != nil { return nil, err } return &s, nil } func (sm *SettingsManager) Save(s *models.ServerSettings) error { sm.mu.Lock() defer sm.mu.Unlock() s.UpdatedAt = time.Now().UTC() data, err := json.MarshalIndent(s, "", " ") if err != nil { return err } return os.WriteFile(sm.path, data, 0644) } func (sm *SettingsManager) defaults() *models.ServerSettings { return &models.ServerSettings{ IPPort: "0.0.0.0:2302", ServerParameters: "-server -world=empty -loadMissionToMemory -noPause", SteamBranch: "stable", SteamUser: "anonymous", Platform: "linux", ActiveConfig: "", ActiveModlist: "", UpdatedAt: time.Now().UTC(), } }