import { cookie, getCSRFToken } from "jsr:@cosense/std@0.29/rest";
import { isErr, unwrapOk } from "npm:option-t@50/plain_result";
import { assert } from "jsr:@core/unknownutil@4/assert";
import { isString } from "jsr:@core/unknownutil@4/is/string";
import data from "./data_en_diff.json" with { type: "json" };

const sid = Deno.env.get("SID");
assert(sid, isString);
const importingProjectName = "nishio-en";

if (data.pages.length === 0) {
  console.log("No page to be imported found.");
} else {
  console.log(
    `Importing ${data.pages.length} pages to "/${importingProjectName}"...`
  );
  
  // workaround: 生のResponseのstatusを見る機能が@cosense/std@0.29に無いので、直接REST APIを叩く
  
  // TODO: エラー処理を握りつぶさずもうちょっとちゃんとする
  const csrf = unwrapOk(await getCSRFToken({ sid }));
  
  const formData = new FormData();
  formData.append(
    "import-file",
    new Blob([JSON.stringify(data)], {
      type: "application/octet-stream",
    }),
  );
  formData.append("name", "undefined");
  
  const res = await fetch(
    `https://scrapbox.io/api/page-data/import/${importingProjectName}.json`,
    {
      method: "POST",
      headers: {
        Cookie: cookie(sid),
        Accept: "application/json, text/plain, */*",
        "X-CSRF-TOKEN": csrf,
      },
      body: formData,
    },
  );
  // 最近のimport pages APIの応答をちゃんと調べてないので、
  // 本当にimportに失敗したときのresponseを判別する方法がわからない。
  // とりあえずResponseが返ってきさえすれば成功したことにする。
  if (!res.ok) {
    console.warn(`Importing may be failed. Please check "/${importingProjectName}".`);
    console.warn(`Status code: ${res.status} ${res.statusText}`);
  }
  console.log(`Import result: ${await res.text()}`);
}