using System.Text.Json; namespace ClinicBackupSync; sealed class SyncSettings { public string WatchFolder { get; set; } = @"D:\Clinic_Pro_Db_backup"; public string UploadUrl { get; set; } = "https://www.infotechonline.asia/pos/upload.php"; public int StableSeconds { get; set; } = 15; public int RetrySeconds { get; set; } = 30; public static SyncSettings Load(string[] args) { var settings = new SyncSettings(); if (File.Exists(AppPaths.SettingsFile)) { var json = File.ReadAllText(AppPaths.SettingsFile); settings = JsonSerializer.Deserialize(json, JsonOptions()) ?? settings; } var folder = ArgValue(args, "--folder"); if (!string.IsNullOrWhiteSpace(folder)) { settings.WatchFolder = folder; } var url = ArgValue(args, "--url"); if (!string.IsNullOrWhiteSpace(url)) { settings.UploadUrl = url; } if (int.TryParse(ArgValue(args, "--stable-seconds"), out var stable) && stable >= 0) { settings.StableSeconds = stable; } if (int.TryParse(ArgValue(args, "--retry-seconds"), out var retry) && retry > 0) { settings.RetrySeconds = retry; } return settings; } public void Save() { var json = JsonSerializer.Serialize(this, new JsonSerializerOptions { WriteIndented = true }); var directory = Path.GetDirectoryName(AppPaths.SettingsFile); if (!string.IsNullOrEmpty(directory)) { Directory.CreateDirectory(directory); } var temporary = AppPaths.SettingsFile + ".tmp"; File.WriteAllText(temporary, json); File.Move(temporary, AppPaths.SettingsFile, overwrite: true); } public static bool HasFlag(string[] args, string flag) { return args.Any(arg => arg.Equals(flag, StringComparison.OrdinalIgnoreCase)); } static string? ArgValue(string[] args, string name) { for (var index = 0; index < args.Length - 1; index++) { if (args[index].Equals(name, StringComparison.OrdinalIgnoreCase)) { return args[index + 1]; } } return null; } static JsonSerializerOptions JsonOptions() { return new JsonSerializerOptions { PropertyNameCaseInsensitive = true, ReadCommentHandling = JsonCommentHandling.Skip, AllowTrailingCommas = true, }; } }