using System; using System.IO; namespace Housing.Services { public class LoginSettings { public bool OfflinePreview { get; set; } = true; // 기본값은 오프라인 테스트 편의를 위해 true public string Procedure { get; set; } = string.Empty; public string ProcessName { get; set; } = string.Empty; private static readonly object _loginLock = new object(); private static LoginSettings _cachedSettings; private static DateTime _lastWriteTime; private static string _cachedPath; public static LoginSettings Load(string path) { lock (_loginLock) { try { if (File.Exists(path)) { var currentWriteTime = File.GetLastWriteTime(path); if (_cachedSettings != null && _cachedPath == path && _lastWriteTime == currentWriteTime) { return _cachedSettings; } var settings = new LoginSettings(); var lines = File.ReadAllLines(path); foreach (var line in lines) { var trimmed = line.Trim(); if (trimmed.StartsWith("OfflinePreview", StringComparison.OrdinalIgnoreCase)) { var parts = trimmed.Split(new[] { '=' }, 2); if (parts.Length == 2) { if (bool.TryParse(parts[1].Trim(), out var val)) { settings.OfflinePreview = val; } else if (int.TryParse(parts[1].Trim(), out var intVal)) { settings.OfflinePreview = intVal != 0; } } } else if (trimmed.StartsWith("Procedure", StringComparison.OrdinalIgnoreCase)) { var parts = trimmed.Split(new[] { '=' }, 2); if (parts.Length == 2) { settings.Procedure = parts[1].Trim(); } } else if (trimmed.StartsWith("ProcessName", StringComparison.OrdinalIgnoreCase)) { var parts = trimmed.Split(new[] { '=' }, 2); if (parts.Length == 2) { settings.ProcessName = parts[1].Trim(); } } } _cachedSettings = settings; _lastWriteTime = currentWriteTime; _cachedPath = path; return settings; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"[LoginSettings Load Error] {ex.Message}"); } return _cachedSettings ?? new LoginSettings(); } } } }