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
}";
}
}
}