import Foundation
import AVFoundation
import PRESTOplay

open class DrmEventEmitter: BaseEventEmitter {

    // MARK: Lifecycle

    public override init(_ parentModule: AnyObject) {
        super.init(parentModule)
    }

    // MARK: Internal

    func emitNewFairplayKey(playerId: String, completerId: String, uri: String) {
        emit(
            consumerId: playerId,
            eventType: "newFairplayKey",
            eventDetails: [
                "completerId": completerId,
                "uri": uri,
            ]
        )
    }

    func emitNewRequest(
        playerId: String,
        requestId: String,
        type: ResourceType,
        method: String,
        url: String,
        headers: [String: String],
        body: Data?
    ) {
        emit(
            consumerId: playerId,
            eventType: "newRequest",
            eventDetails: [
                "requestId": requestId,
                "type": type.rawValue,
                "method": method,
                "url": url,
                "headers": NSDictionary(dictionary: headers),
                "body": BridgeSerializer.toBase64Encoded(data: body),
            ]
        )
    }

    func emitNewResponse(
        playerId: String,
        responseId: String,
        type: ResourceType,
        status: Int,
        url: String,
        headers: [String: String],
        body: Data?
    ) {
        emit(
            consumerId: playerId,
            eventType: "newResponse",
            eventDetails: [
                "responseId": responseId,
                "type": type.rawValue,
                "status": status,
                "url": url,
                "headers": NSDictionary(dictionary: headers),
                "body": BridgeSerializer.toBase64Encoded(data: body),
            ]
        )
    }

    func emitDrmChanged(
        playerId: String,
        drm: String
    ) {
        emit(
            consumerId: playerId,
            eventType: "drmChanged",
            eventDetails: [
                "drm": drm,
            ]
        )
    }
}
