'use strict'

const multihashing = require('multihashing')
const path = require('path')
const fs = require('fs')

const URL = global.window && (window.URL || window.webkitURL)

// Hashes a key
exports.keyHash = (bytes) => {
  return multihashing(bytes, 'sha2-256')
}

const toBlob = (content) => {
  try {
    let blob
    try {
      // BlobBuilder = Deprecated, but widely implemented
      const BlobBuilder = global.window &&
              (window.BlobBuilder ||
              window.WebKitBlobBuilder ||
              window.MozBlobBuilder ||
              window.MSBlobBuilder)

      blob = new BlobBuilder()
      blob.append(content)
      blob = blob.getBlob()
    } catch (e) {
      // The proposed API
      blob = new window.Blob([content])
    }
    return URL.createObjectURL(blob)
  } catch (e) {
    return 'data:application/javascript,' + encodeURIComponent(content)
  }
}

const rawScript = fs.readFileSync(path.join(__dirname, '../vendor/prime.worker.js'))

exports.workerScript = toBlob(rawScript.toString())