/// <reference no-default-lib="true" />
/// <reference lib="esnext" />
/// <reference lib="dom" />

import type {
  getDocument,
  GlobalWorkerOptions,
} from "./deno-pdfjs-dist-types/mod.d.ts";

declare global {
  interface Window {
    pdfjsLib: {
      getDocument: typeof getDocument;
      GlobalWorkerOptions: typeof GlobalWorkerOptions;
    };
  }
}

// load pdfjs
await new Promise<void>((resolve, reject) => {
  const script = document.createElement("script");
  script.src =
    "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.13.216/pdf.min.js";
  script.addEventListener("load", () => resolve());
  script.addEventListener("error", reject);
  document.body.append(script);
});

// initialize
window.pdfjsLib.GlobalWorkerOptions.workerSrc =
  "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.13.216/pdf.worker.min.js";

// upload file
const file = await new Promise<File | undefined>((resolve, reject) => {
  const input = document.createElement("input");
  input.type = "file";
  input.accept = "application/pdf,.pdf";
  input.addEventListener("change", () => {
    resolve(
      input.files?.[0] ?? undefined,
    );
  });
  input.addEventListener("error", reject);
  document.body.append(input);
  input.click();
  input.remove();
});

if (file) {
  const data = new Uint8Array(await file.arrayBuffer());

  const pdf = await window.pdfjsLib.getDocument({
    data,
    cMapUrl:
      "https://storage.googleapis.com/chrono-lexica/ci7lus-assets/pdfjs/cmaps/",
    cMapPacked: true,
  }).promise;
  // browse
  console.log(pdf);
}