import Foundation

typealias SavedGameConflictResolver = (Data, @escaping (Error?) -> Void) -> Void

/// Read the winning save before resolving conflicts, and surface either stage's
/// failure. Never replace a stored save with empty bytes when loading fails.
func loadSavedGameData(
    load: (@escaping (Data?, Error?) -> Void) -> Void,
    resolveConflicts: SavedGameConflictResolver?,
    completion: @escaping (Data?, Error?) -> Void
) {
    load { data, error in
        if let error = error {
            completion(nil, error)
            return
        }
        guard let data = data else {
            completion(nil, NSError(
                domain: "PlayGames",
                code: 2,
                userInfo: [NSLocalizedDescriptionKey: "snapshot data unavailable"]
            ))
            return
        }
        guard let resolveConflicts = resolveConflicts else {
            completion(data, nil)
            return
        }
        resolveConflicts(data) { resolutionError in
            completion(resolutionError == nil ? data : nil, resolutionError)
        }
    }
}
