import Foundation
/// Local JSON persistence — the fallback when iCloud is unavailable / the user isn't signed in. No
/// external-change source (single-device), so `onExternalChange` is never called.
final class FileSlotBackend: SlotBackend {
private let url: URL
var onExternalChange: (() -> Void)?
var onLoaded: ((Bool) -> Void)?
var isLoaded: Bool { true } // local file is authoritative immediately
init(url: URL) { self.url = url }
func read() -> SlotPayload {
(try? JSONDecoder().decode(SlotPayload.self, from: Data(contentsOf: url))) ?? SlotPayload()
}
func write(_ payload: SlotPayload) { try? JSONEncoder().encode(payload).write(to: url) }
func flush() {}
}