import AVKit
import Foundation

import PRESTOplay

public class RequestCompleter {

    // MARK: Lifecycle

    init(_ playerId: String, _ request: Request, _ completionHandler: @escaping (Request?) -> Void) {
        requestId = UUID().uuidString

        self.playerId = playerId
        self.request = request
        self.completionHandler = completionHandler
    }

    // MARK: Public

    public let requestId: String
    public let playerId: String

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

    public var url: String {
        get {
            request.url?.absoluteString ?? ""
        }

        set {
            request.url = URL(string: newValue)
        }
    }

    public var method: String {
        "POST"
    }

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

        set {
            request.headers = newValue
        }
    }

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

        set {
            request.data = newValue
        }
    }

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

        completionHandler(request)
    }

    // MARK: Internal

    typealias CompletionHandler = (Request?) -> Void

    // MARK: Private

    private let request: Request;
    private let completionHandler: CompletionHandler;

    private let lock = NSLock()

}
