/*
* 胡桃数据库的统计
*
* */
import { HutaoApi, Character } from "../components/models.js";
import { Cfg } from "../components/index.js";
import lodash from "lodash";
import { segment } from "oicq";

export async function consStat(e, { render }) {
  if (Cfg.isDisable(e, "wiki.abyss")) {
    return;
  }

  let consData = await HutaoApi.getCons();
  if (!consData) {
    e.reply("暂时无法查询");
    return true;
  }



  let msg = e.msg;

  let mode = /持有/.test(msg) ? "char" : "cons";

  let conNum = -1;
  if (mode === "cons") {
    lodash.forEach([/0|零/, /1|一/, /2|二/, /3|三/, /4|四/, /5|五/, /6|六|满/], (reg, idx) => {
      if (reg.test(msg)) {
        conNum = idx;
        return false;
      }
    })
  }

  if (!consData && !consData.data) {
    return true;
  }

  let ret = [];

  lodash.forEach(consData.data, (ds) => {
    let char = Character.get(ds.avatar);

    let data = {
      name: char.name || ds.avatar,
      star: char.star || 3,
      hold: ds.holdingRate
    };

    if (mode === "char") {
      data.cons = lodash.map(ds.rate, (c) => {
        c.value = c.value * ds.holdingRate;
        return c;
      });
    } else {
      data.cons = ds.rate
    }


    ret.push(data);
  });

  if (conNum > -1) {
    ret = lodash.sortBy(ret, [`cons[${conNum}].value`]);
    ret.reverse();
  } else {
    ret = lodash.sortBy(ret, ['hold']);
  }

  let base64 = await render("stat", "character", {
    chars: ret,
    abbr: Character.getAbbr(),
    mode: mode,
    conNum,
    lastUpdate: consData.lastUpdate,
    pct: function (num) {
      return (num * 100).toFixed(2);
    },
    cfgScale: Cfg.scale(1.5)
  });
  if (base64) {
    e.reply(segment.image(`base64://${base64}`));
  }
  return true;
}

export async function abyssPct(e, { render }) {

  if (Cfg.isDisable(e, "wiki.abyss")) {
    return;
  }

  let abyssData = await HutaoApi.getAbyssPct();
  if (!abyssData) {
    e.reply("暂时无法查询");
    return true;
  }

  let ret = [], chooseFloor = -1, msg = e.msg;

  const floorName = {
    "12": "十二层",
    "11": "十一层",
    "10": "十层",
    "9": "九层"
  };

  // 匹配深渊楼层信息
  lodash.forEach(floorName, (cn, num) => {
    let reg = new RegExp(`${cn}|${num}`);
    if (reg.test(msg)) {
      chooseFloor = num;
      return false;
    }
  });

  console.log('floor', chooseFloor);


  lodash.forEach(abyssData.data, (floorData) => {
    let floor = {
      floor: floorData.floor,

    };
    let avatars = [];
    lodash.forEach(floorData.avatarUsage, (ds) => {
      let char = Character.get(ds.id);
      if (char) {
        avatars.push({
          name: char.name,
          star: char.star,
          value: ds.value * 8
        })
      }
    })
    avatars = lodash.sortBy(avatars, "value", ["asc"]);
    avatars.reverse();
    if (chooseFloor === -1) {
      avatars = avatars.slice(0, 14);
    }

    ret.push({
      floor: floorData.floor,
      avatars
    });
  })


  let base64 = await render("stat", "abyss-pct", {
    abyss: ret,
    floorName,
    chooseFloor,
    lastUpdate: abyssData.lastUpdate,
    pct: function (num) {
      return (num * 100).toFixed(2);
    },
    cfgScale: Cfg.scale(1.5)
  });
  if (base64) {
    e.reply(segment.image(`base64://${base64}`));
  }
  return true;

}