using System; using System.IO; using Newtonsoft.Json.Linq; namespace PCMonitor { /// /// Configuration Reader /// Membaca konfigurasi dari file JSON /// public static class ConfigReader { private static readonly string ConfigPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "PCMonitor", "config.json" ); private static JObject configData; static ConfigReader() { LoadConfig(); } private static void LoadConfig() { try { if (!File.Exists(ConfigPath)) { CreateDefaultConfig(); } string jsonContent = File.ReadAllText(ConfigPath); configData = JObject.Parse(jsonContent); } catch (Exception ex) { // Fallback to defaults configData = JObject.Parse(GetDefaultConfigJson()); } } public static string GetApiUrl() { return configData?["api_server"]?["url"]?.ToString() ?? "http://localhost:8080"; } public static int GetMonitoringInterval() { return configData?["monitoring"]?["interval"]?.Value() ?? 30000; } public static int GetScreenshotInterval() { return configData?["monitoring"]?["screenshot_interval"]?.Value() ?? 300000; } public static bool IsDebugMode() { return configData?["debug"]?.Value() ?? false; } private static void CreateDefaultConfig() { Directory.CreateDirectory(Path.GetDirectoryName(ConfigPath)); File.WriteAllText(ConfigPath, GetDefaultConfigJson()); } private static string GetDefaultConfigJson() { return @"{ ""api_server"": { ""url"": ""http://localhost:8080"", ""timeout"": 30 }, ""monitoring"": { ""interval"": 30000, ""screenshot_interval"": 300000, ""activity_interval"": 60000, ""process_interval"": 30000 }, ""bandwidth"": { ""enabled"": true, ""max_limit_kbps"": 100000, ""min_limit_kbps"": 64 }, ""security"": { ""require_ssl"": false, ""use_encryption"": false }, ""logging"": { ""level"": ""INFO"", ""max_file_size"": 10485760, ""retention_days"": 30 }, ""debug"": false }"; } } }