using System.IO; using System.Text.Json; namespace UtopiaCanteenSystem.Services; /// /// Simple JSON-backed configuration stored alongside the app binaries. /// public class ConfigService : IConfigService { private readonly string _configPath; private AppConfig _config; public ConfigService() { _configPath = Path.Combine(AppContext.BaseDirectory, "appsettings.json"); _config = LoadConfig(); } public string GetSyncApiEndpoint() => _config.SyncApiEndpoint ?? string.Empty; public void SetSyncApiEndpoint(string endpoint) { _config.SyncApiEndpoint = endpoint ?? string.Empty; SaveConfig(); } public bool GetScannerConnected() => _config.ScannerConnected; public void SetScannerConnected(bool connected) { _config.ScannerConnected = connected; SaveConfig(); } public int GetScanTimeoutSeconds() => _config.ScanTimeoutSeconds; public void SetScanTimeoutSeconds(int seconds) { _config.ScanTimeoutSeconds = seconds; SaveConfig(); } public string GetAdminCardId() => _config.AdminCardId ?? string.Empty; public void SetAdminCardId(string cardId) { _config.AdminCardId = cardId ?? string.Empty; SaveConfig(); } private AppConfig LoadConfig() { try { if (!File.Exists(_configPath)) { var defaults = new AppConfig(); SaveConfig(defaults); return defaults; } var json = File.ReadAllText(_configPath); var config = JsonSerializer.Deserialize(json); return config ?? new AppConfig(); } catch { return new AppConfig(); } } private void SaveConfig() { SaveConfig(_config); } private void SaveConfig(AppConfig config) { try { var json = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(_configPath, json); } catch { // Ignore write failures (e.g., read-only location). } } private sealed class AppConfig { public string SyncApiEndpoint { get; set; } = "https://api.example.com/uind/sync"; public bool ScannerConnected { get; set; } = false; public int ScanTimeoutSeconds { get; set; } = 60; public string AdminCardId { get; set; } = "ADMIN"; } }