enum RCTVideoError : Int {
    case fromJSPart
    case noLicenseServerURL
    case licenseRequestNotOk
    case noDataFromLicenseRequest
    case noSPC
    case noDataRequest
    case noCertificateData
    case noCertificateURL
    case noFairplayDRM
    case noDRMData
    case invalidContentId
}

enum RCTVideoErrorHandler {
    
    static let noDRMData = NSError(
        domain: "RCTVideo",
        code: RCTVideoError.noDRMData.rawValue,
        userInfo: [
            NSLocalizedDescriptionKey: "Error obtaining DRM license.",
            NSLocalizedFailureReasonErrorKey: "No drm object found.",
            NSLocalizedRecoverySuggestionErrorKey: "Have you specified the 'drm' prop?"
        ])
    
    static let noCertificateURL = NSError(
        domain: "RCTVideo",
        code: RCTVideoError.noCertificateURL.rawValue,
        userInfo: [
            NSLocalizedDescriptionKey: "Error obtaining DRM License.",
            NSLocalizedFailureReasonErrorKey: "No certificate URL has been found.",
            NSLocalizedRecoverySuggestionErrorKey: "Did you specified the prop certificateUrl?"
        ])
    
    static let noCertificateData = NSError(
        domain: "RCTVideo",
        code: RCTVideoError.noCertificateData.rawValue,
        userInfo: [
            NSLocalizedDescriptionKey: "Error obtaining DRM license.",
            NSLocalizedFailureReasonErrorKey: "No certificate data obtained from the specificied url.",
            NSLocalizedRecoverySuggestionErrorKey: "Have you specified a valid 'certificateUrl'?"
        ])
    
    static let noSPC = NSError(
        domain: "RCTVideo",
        code: RCTVideoError.noSPC.rawValue,
        userInfo: [
            NSLocalizedDescriptionKey: "Error obtaining license.",
            NSLocalizedFailureReasonErrorKey: "No spc received.",
            NSLocalizedRecoverySuggestionErrorKey: "Check your DRM config."
        ])
    
    static let noLicenseServerURL = NSError(
        domain: "RCTVideo",
        code: RCTVideoError.noLicenseServerURL.rawValue,
        userInfo: [
            NSLocalizedDescriptionKey: "Error obtaining DRM License.",
            NSLocalizedFailureReasonErrorKey: "No license server URL has been found.",
            NSLocalizedRecoverySuggestionErrorKey: "Did you specified the prop licenseServer?"
        ])
    
    static let noDataFromLicenseRequest = NSError(
        domain: "RCTVideo",
        code: RCTVideoError.noDataFromLicenseRequest.rawValue,
        userInfo: [
            NSLocalizedDescriptionKey: "Error obtaining DRM license.",
            NSLocalizedFailureReasonErrorKey: "No data received from the license server.",
            NSLocalizedRecoverySuggestionErrorKey: "Is the licenseServer ok?"
        ])
    
    static func licenseRequestNotOk(_ statusCode: Int) -> NSError {
        return NSError(
            domain: "RCTVideo",
            code: RCTVideoError.licenseRequestNotOk.rawValue,
            userInfo: [
                NSLocalizedDescriptionKey: "Error obtaining license.",
                NSLocalizedFailureReasonErrorKey: String(
                    format:"License server responded with status code %li",
                    (statusCode)
                ),
                NSLocalizedRecoverySuggestionErrorKey: "Did you send the correct data to the license Server? Is the server ok?"
            ])
    }

    static func fromJSPart(_ error: String) -> NSError {
        return NSError(domain: "RCTVideo",
            code: RCTVideoError.fromJSPart.rawValue,
            userInfo: [
                NSLocalizedDescriptionKey: error,
                NSLocalizedFailureReasonErrorKey: error,
                NSLocalizedRecoverySuggestionErrorKey: error
            ])
    }
    
    static let invalidContentId = NSError(
        domain: "RCTVideo",
        code: RCTVideoError.invalidContentId.rawValue,
        userInfo: [
            NSLocalizedDescriptionKey: "Error obtaining DRM license.",
            NSLocalizedFailureReasonErrorKey: "No valide content Id received",
            NSLocalizedRecoverySuggestionErrorKey: "Is the contentId and url ok?"
        ])
}