import AVKit
import Foundation

import PRESTOplay

public class DeferredResponseModifier: ResponseModifierProtocol {

    // MARK: Lifecycle

    public init(eventEmitter: DrmEventEmitter, requestIdTag: String) {
        self.eventEmitter = eventEmitter
        self.requestIdTag = requestIdTag
    }

    // MARK: Internal

    public func modify(_ response: Response, completionHandler: @escaping (Response?) -> Void) {
        
        if response.type != .license && response.type != .provision {
            completionHandler(response)
            return
        } else if let playerId = response.configuration.metaData?.extra?[self.requestIdTag] {
            let responseCompleter = ResponseCompleter(playerId, response, completionHandler)
            
            Repository.shared.responseCompleters.add(
                key: responseCompleter.responseId,
                value: responseCompleter
            )
            
            // TODO: add body and headers
            eventEmitter.emitNewResponse(
                playerId: playerId,
                responseId: responseCompleter.responseId,
                type: responseCompleter.type,
                status: responseCompleter.status,
                url: responseCompleter.url,
                headers: responseCompleter.headers,
                body: responseCompleter.body
            )
        } else {
            completionHandler(response)
            return
        }
    }

    // MARK: Private

    private let eventEmitter: DrmEventEmitter
    private let requestIdTag: String

}
