import Foundation import Observation @Observable final class ReadTracker { private static let storeKey = "mm.readTimestamps" private(set) var timestamps: [String: TimeInterval] init() { let raw = UserDefaults.standard.dictionary(forKey: Self.storeKey) ?? [:] var dict: [String: TimeInterval] = [:] for (k, v) in raw { if let n = v as? Double { dict[k] = n } else if let n = v as? Int { dict[k] = TimeInterval(n) } } self.timestamps = dict } func lastRead(for nodeId: String) -> TimeInterval { timestamps[nodeId] ?? 0 } func markRead(_ nodeId: String, at time: Date) { let ts = time.timeIntervalSince1970 if (timestamps[nodeId] ?? 0) < ts { timestamps[nodeId] = ts persist() } } private func persist() { UserDefaults.standard.set(timestamps, forKey: Self.storeKey) } }