import AVKit
import Foundation

import PRESTOplay

public class DeferredRequestModifier: RequestModifierProtocol {

    // MARK: Lifecycle

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

    // MARK: Internal

    public func modify(_ request: Request, completionHandler: @escaping (Request?) -> Void) {
        
        if request.type != .license && request.type != .provision {
            completionHandler(request)
            return
        } else if let playerId = request.configuration.metaData?.extra?[self.requestIdTag] {
                    
            let requestCompleter = RequestCompleter(playerId, request, completionHandler)
            
            Repository.shared.requestCompleters.add(
                key: requestCompleter.requestId,
                value: requestCompleter
            )
            
            eventEmitter.emitNewRequest(
                playerId: playerId,
                requestId: requestCompleter.requestId,
                type: requestCompleter.type,
                method: requestCompleter.method,
                url: requestCompleter.url,
                headers: requestCompleter.headers,
                body: requestCompleter.body
            )
        } else {
            completionHandler(request)
            return
        }
    }

    // MARK: Private

    private let eventEmitter: DrmEventEmitter
    private let requestIdTag: String

}
