import { ueuse } from "../../../types/types";
import MiQ from "../../../miq/main.js";
import config from "../../../config.js";
import { Reply } from "../main.js";
import { readFileSync, writeFileSync } from "fs";
import { Permission } from "./permission";

export default async function MakeItAQuote(data: ueuse) {
  if (!config.miq) {
    console.log("MiQ(管理者無効)：", await Reply(`
    BOT管理者によってMake it a quoteが無効化されています。
    そのため\`/miq\`はご利用いただけません。
    `, data.uniqid));
    return;
  }

  let color: boolean;
  let msg: string;

  if (data.abi === "color: true") {
    msg = "カラーモードでMake it a Quoteを生成しました。";
    color = true;
  } else if (data.abi === "color: false") {
    msg = "モノクロモードでMake it a Quoteを生成しました。";
    color = false;
  } else {
    msg = "ご指定がないためモノクロモードでMake it a Quoteを生成しました。";
    color = false;
  }

  const ueuseData: ueuse = (await (
    await fetch(`${config.uwuzu.host}/api/ueuse/get`, {
      method: "POST",
      cache: "no-store",
      body: JSON.stringify({
        token: config.uwuzu.apiToken,
        uniqid: data.replyid,
      }),
    })
  ).json())["0"];

  console.log(ueuseData);

  // 権限一覧取得
  const permissions: { [user: string]: Permission } =
  JSON.parse(readFileSync("data/miqPermissions.json", "utf-8"));

  // 初期化
  if (permissions[ueuseData.account.userid] === undefined) {
    permissions[ueuseData.account.userid] = "consent";
    writeFileSync(
      "data/miqPermissions.json",
      JSON.stringify(permissions),
      "utf-8"
    );
  }

  if (
    permissions[ueuseData.account.userid] === "me" &&
    ueuseData.account.userid !== data.account.userid
  ) {
    console.log("MiQ(自分自身専用)：", await Reply(`
    生成元ユーズの投稿者が生成要求者を自分自身のみに設定しています。
    しかし、あなたは投稿者自身ではないためこのユーズにMake it a Quoteを使用することはできません。
    `, data.uniqid));
    return;
  }

  if (permissions[ueuseData.account.userid] === "consent") {
    console.log("MiQ(許可制)：", await Reply(`
    生成元ユーズの投稿者が生成要求者を許可制に設定しています。
    このユーズにMake it a Quoteを使用するには、
    @${ueuseData.account.userid}さんがこのユーズに返信で\`/miq allow\`を使用する必要があります。
    `, data.uniqid));
    return;
  }

  const img = await MiQ({
    type: "Base64Data",
    color: color,
    text: ueuseData.text,
    iconURL: ueuseData.account.user_icon,
    userName: ueuseData.account.username,
    userID: ueuseData.account.userid,
  });

  const req = await fetch(`${config.uwuzu.host}/api/ueuse/create`, {
    method: "POST",
    body: JSON.stringify({
      token: config.uwuzu.apiToken,
      text: msg,
      image1: img,
      nsfw: data.nsfw,
      replyid: data.uniqid,
    }),
    cache: "no-store",
  });

  const res = await req.json();

  console.log("MiQ：", res);
}
