import AVKit
import Foundation
import PRESTOplay

public class DeferredKeyModifier: 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 != .asset {
            // handled by DeferredRequestModifier
            completionHandler(request)
            return
        } else if let requestId = request.configuration.metaData?.extra?[self.requestIdTag] {

            let keyCompleter = KeyCompleter(requestId, request, completionHandler)

            
            if Repository.shared.keyCompleters.get(key: keyCompleter.completerId) != nil {
                print ("[DeferredKeyModifier]: ERROR, duplicated key")
            } else {
                Repository.shared.keyCompleters.add(
                    key: keyCompleter.completerId,
                    value: keyCompleter
                )
                
                eventEmitter.emitNewFairplayKey(
                    playerId: requestId,
                    completerId: keyCompleter.completerId,
                    uri: keyCompleter.uri
                )
            }
        } else {
            completionHandler(request)
            return
        }
    }

    // MARK: Private

    private let eventEmitter: DrmEventEmitter
    private let requestIdTag: String

}
