//
//  AggregateOperation.swift
//  RAD
//
//  Copyright 2018 NPR
//
//  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
//  this file except in compliance with the License. You may obtain a copy of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software distributed under the
//  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
//  either express or implied. See the License for the specific language governing permissions
//  and limitations under the License.
//

import Foundation

class AggregateOperation: OutputOperation<UIBackgroundFetchResult> {
    private var results = Set<UIBackgroundFetchResult>()

    func add(_ result: UIBackgroundFetchResult) {
        results.insert(result)
    }

    override func execute() {
        let results: [UIBackgroundFetchResult] = [.newData, .noData, .failed]
        let foundResult = results.first(where: {
            return self.results.contains($0)
        })
        var output: UIBackgroundFetchResult = .failed
        if let foundResult = foundResult {
            output = foundResult
        } else if self.results.count == 0 {
            output = .noData
        }

        finish(with: output)
    }
}
