const ComPDFKitViewer = {
  init (options, element) {
    return new Promise((resolve) => {
      element.addEventListener("ready", function ready () {
        element.removeEventListener('ready', ready)
        const iframeWindow = element.querySelector('iframe').contentWindow

        Promise.resolve().then(function() {
          resolve({
            docViewer: iframeWindow.instance
          })
        })

      })
      const viewer = new Viewer(options, element)
    })
  }
}
class Viewer {
  constructor (options, element) {
    this.instance = null
    this.options = options
    this.initialDoc = options.pdfUrl || null
    this.element = element
    element.addEventListener("ready", (function ready() {
      element.removeEventListener("ready", ready)
    }))
    this.create()
  }

  _createEvent (e, t) {
    let n;
    try {
      n = new CustomEvent(e, {
          detail: t,
          bubbles: true,
          cancelable: true
      })
    } catch (o) {
        (n = document.createEvent("Event")).initEvent(e, true, true),
        n.detail = t
    }
    return n
  }

  create() {
    if (this.initialDoc) {
      this.initialDoc = encodeURIComponent(this.initialDoc)
      this._create()
    } else {
      this._create()
    }
  }

  _create () {
    if (!this._trigger) {
      this._trigger = function(e, t) {
        var n = this._createEvent(e, t);
        this.element.dispatchEvent(n)
      }
    }
    this.createViewer()
  }

  createViewer () {
    const self = this
    let webviewerUrl = './webviewer/index.html'
    if (this.initialDoc) {
      webviewerUrl += "#d=\"".concat(decodeURIComponent(this.initialDoc)).concat("\"")
    }
    const iframe = document.createElement("iframe")
    iframe.id = "webviewer-".concat(this.id)
    iframe.src = webviewerUrl
    iframe.title = "webviewer"
    iframe.frameBorder = 0
    iframe.width = "100%"
    iframe.height = "100%"
    iframe.setAttribute("allowfullscreen", true)
    iframe.setAttribute("webkitallowfullscreen", true)
    iframe.setAttribute("mozallowfullscreen", true)
    this.iframe = iframe
    this.options?.backgroundColor && iframe.setAttribute("data-bgcolor", this.options.backgroundColor),
    this.options?.assetPath && iframe.setAttribute("data-assetpath", encodeURIComponent(this.options.assetPath)),
    this.loadListener = function() {
      var $iframe = self.iframe;
      self.instance = $iframe.contentWindow.instance;
      $iframe.contentWindow.instance.initApiUrl(self.options)
      self._trigger("ready");
    },
    iframe.addEventListener("load", this.loadListener),
    this.element.appendChild(iframe)
  }
}

export default ComPDFKitViewer
