const _ = require("lodash");

initFunctionData = async (data) => {
  const {
    processId,
    payload,
    previousData,
    ref1Id,
    ref2Id,
    ref3Id,
    ref4Id,
    ref5Id,
    description,
  } = data;
  let { unitId } = data;
  // if (unitId == 14166153)
  // return { statusCode: 403, message: "درحال توسعه", error: data };
  const process =
    data.process ||
    (await bpmsDB.bpms_process.findOne({
      where: { id: processId, type: { [Op.in]: [0, 1] } },
      raw: true,
    }));
  // if (process.networkId) {
  const processNetwork = await db.network.findByPk(process.networkId, {
    raw: true,
    attributes: ["level"],
  });
  // const payloadNetwork = await db.network.findOne({
  //   where: {
  //     [`level${processNetwork.level}Id`]: process.networkId,
  //     id: payload.networkId,
  //   },
  //   raw: true,
  // });
  // }

  // let processChecklist = await bpmsDB.bpms_processChecklist.findAll({
  //   where: { processId: process.id },
  //   attributes: ["checklistId"],
  //   order: [["ord", "asc"]],
  // });

  // const checklistIds =
  //   data?.checklists?.length
  //     ? data.checklists.map((item) => +item.id).filter(Boolean).join(",")
  //     : processChecklist
  //       .map((e) => +e.checklistId)
  //       .filter((id) => !isNaN(id) && id !== 0)
  //       .join(",");

  // const previousTask = data.previousTask;

  // const network = await db.network.findByPk(processNetwork.id, {
  //   raw: true,
  // });
  const network = await db.network.findByPk(payload.networkId, {
    raw: true,
  });
  let newData = {
    workflowId: process.workflowId,
    processId,
    userId: payload.userId,
    ..._.pick(network, [
      "level1Id",
      "level2Id",
      "level3Id",
      "level4Id",
      "level5Id",
      "level6Id",
    ]),
  };

  if (unitId) {
    const unit =
      data.unit ||
      (await db.unit.findOne({
        where: { id: unitId, status: 1 },
      }));
    newData = { ...newData, data: [{ questionId: 100009, answer: unitId }] };
  } else {
    const unitQuestion = data?.data?.find(
      (r) => r.questionId == 100009 && r.answer
    );
    if (unitQuestion) {
      unitId = unitQuestion.answer;
      const unit =
        data.unit ||
        (await db.unit.findOne({
          where: { id: unitId, status: 1 },
        }));
    }
    return { data: newData, transaction: data.transaction }
  }
}

module.exports = {
  initFunctionData
}