using System.IO; using System.Text.Json; using WindowsGotify.Models; namespace WindowsGotify.Services; public sealed class ConfigService { private readonly Logger _logger; private readonly string _configPath; private readonly JsonSerializerOptions _options = new() { WriteIndented = true }; public ConfigService(Logger logger) { _logger = logger; var dir = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "WindowsGotify"); Directory.CreateDirectory(dir); _configPath = Path.Combine(dir, "config.json"); } public async Task LoadAsync() { if (!File.Exists(_configPath)) { var config = new AppConfig(); await SaveAsync(config); _logger.Warn($"Created default config: {_configPath}"); return config; } try { await using var stream = File.OpenRead(_configPath); return await JsonSerializer.DeserializeAsync(stream, _options) ?? new AppConfig(); } catch (Exception ex) { _logger.Error("Config load failed; using default config.", ex); return new AppConfig(); } } public async Task SaveAsync(AppConfig config) { await using var stream = File.Create(_configPath); await JsonSerializer.SerializeAsync(stream, config, _options); } public string GetConfigPath() => _configPath; }