102 lines
2.5 KiB
C#
102 lines
2.5 KiB
C#
using System.IO;
|
|
using System.Text.Json;
|
|
|
|
namespace UtopiaCanteenSystem.Services;
|
|
|
|
/// <summary>
|
|
/// Simple JSON-backed configuration stored alongside the app binaries.
|
|
/// </summary>
|
|
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<AppConfig>(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";
|
|
}
|
|
}
|