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

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

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

  if (permissions[data.account.userid] !== "consent") {
    console.log("MiQ許可制(許可制以外)：", await Reply(`
    あなたに対してのMake it a Quoteの生成要求者が許可制に設定されていません。
    そのため、\`/miq allow\`はご利用いただけません。
    `, data.uniqid));
    return;
  }

  const confirmUeuse: 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"];

  const me: meApi = await (
    await fetch(`${config.uwuzu.host}/api/me`, {
      method: "POST",
      cache: "no-store",
      body: JSON.stringify({
        token: config.uwuzu.apiToken
      }),
    })
  ).json()

  if (confirmUeuse.account.userid !== me.userid) {
    console.log("MiQ許可制(誤アカウント)：", await Reply(`
    返信先がこのBOTではありません。
    `, data.uniqid));
    return;
  }

  if (confirmUeuse.replyid === "") {
    console.log("MiQ許可制(誤ユーズ)：", await Reply(`
    形式が正規ではありません。
    `, data.uniqid));
    return;
  }

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

  if (requestUeuse.replyid === "") {
    console.log("MiQ許可制(誤ユーズ)：", await Reply(`
    形式が正規ではありません。
    `, data.uniqid));
    return;
  }

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

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

  const img = await MiQ({
    type: "Base64Data",
    color: color,
    text: miqUeuse.text,
    iconURL: miqUeuse.account.user_icon,
    userName: miqUeuse.account.username,
    userID: miqUeuse.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: miqUeuse.nsfw,
      replyid: data.uniqid,
    }),
    cache: "no-store",
  });

  const res = await req.json();

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