import AVKit
import Foundation

import PRESTOplay

public class ResponseCompleter {

    // MARK: Lifecycle

    init(
        _ playerId: String,
        _ response: Response,
        _ completionHandler: @escaping (Response?) -> Void
    ) {
        responseId = UUID().uuidString

        self.playerId = playerId
        self.response = response
        self.completionHandler = completionHandler
    }

    // MARK: Public

    public let responseId: String
    public let playerId: String

    public var type: ResourceType {
        switch response.type {
        case .provision:
            return ResourceType.drmCertificate
        case .license:
            return ResourceType.drmLicense
        default:
            return ResourceType.other
        }
    }

    public var status: Int {
        // status code -1: no status code received (e.g. timeout)
        response.statusCode ?? -1
    }

    public var url: String {
        response.url!.absoluteString
    }

    public var headers: [String: String] {
        get {
            response.headers
        }

        set {
            response.headers = newValue
        }
    }

    public var body: Data? {
        get {
            response.data
        }

        set {
            response.data = newValue
        }
    }

    public func complete() {
        lock.lock()
        defer {
            lock.unlock()
        }

        completionHandler(response)
    }

    // MARK: Internal

    typealias CompletionHandler = (Response?) -> Void

    // MARK: Private

    private let response: Response;
    private let completionHandler: (Response?) -> Void;

    private let lock = NSLock()

}
