import {
  getCurrentNextOperation, getTaskInfo,
  setOtherSecurityMeasuresSave,
  setSecurityMeasuresSave,
  setTaskFile,
  setTaskSave
} from "@/api";
import {addFormInfo} from "../api";
import {filePath} from '@/utils/tools.js'

// 处理表单数据
// TYPE  0  纯文本  1  图片  2  视频  3  divider标签  4  动态添加  5  签字
const processFormData = async (formData, formItems) => {
  const form = []
  for (let i = 0; i < formItems.length; i++) {
    const formItem = formItems[i]
    const obj = {
      ITEM: formItem.name || '',
      ITEM_NAME: formItem.key_name || '',
      ITEM_VALUE: formData[formItem.key_name] || '',
      FK_NAME: formItem.key_id || '',
      FK_VALUE: formData[formItem.key_id] || '',
      TYPE: formItem.type,
      IS_NOT_SHOW: formItem.IS_NOT_SHOW || 0,
      SORT: i + 1
    }
    if (formItem.type === 1 || formItem.type === 2) {
      if (typeof formData[formItem.key_name] === 'object') {
        const currentItem = uni.$u.deepClone(formData[formItem.key_name])
        const codeList = []
        for (let j = 0; j < currentItem.length; j++) {
          const {CODE} = await setTaskFile({formData: {type: currentItem[j].oldUrl}, name: 'files', filePath: currentItem[j].url})
          codeList.push(CODE)
        }
        obj.ITEM_VALUE = ''
        obj.picList = codeList
      } else {
        throw Error('图片和视频只支持数组')
      }
    }
    if (formItem.type === 4) {
      if (typeof formData[formItem.key_name] === 'object') {
        const currentItem = uni.$u.deepClone(formData[formItem.key_name])
        const itemList = []
        for (let j = 0; j < currentItem.length; j++) {
          itemList.push(await processFormData(currentItem[j], formItem.listStructure))
        }
        obj.ITEM_VALUE = ''
        obj.list = itemList
      } else {
        throw Error('动态表单只支持数组')
      }
    }
    if (formItem.type === 5) {
      if (typeof formData[formItem.key_name] === 'string') {
        const {CODE} = await setTaskFile({formData: {type: formData[formItem.key_name + 'oldUrl']}, name: 'files', filePath: formData[formItem.key_name]})
        obj.ITEM_VALUE = CODE
      } else {
        throw Error('签字只支持字符串')
      }
    }
    form.push(obj)
  }
  return form
}
// 提交表单基础信息
export const setSubmitForm = async ({form, formItems, TYPE, CORP_ID, EW_RU_TASK_ID}) => {
  const {taskIds} = await setTaskSave({
    data: [{form: await processFormData(form, formItems),task:{EW_RU_TASK_ID:EW_RU_TASK_ID}}],
    TYPE,
    postMethod: 'application/json',
  })
  await resolveNextOperation({
    EW_RU_TASK_ID: taskIds[0],
    CORP_ID,
    TYPE
  })
}
// 处理选择人员数据
const processSelectedPersonnelData = (formData, list) => {
  const form = []
  for (let i = 0; i < list.length; i++) {
    for (let j = 0; j < list[i].list.length; j++) {
      const item = list[i].list[j]
      const link = item.key_id.substring(item.key_id.indexOf('&&') + 2)
      form.push({
        TYPE_NAME: item.value,
        TYPE: item.code,
        TYPE_DESCRIBE: item.desc,
        DEPARTMENT_ID: item.type === '1' ? formData[item.key_id] : '',
        DEPARTMENT_NAME: item.type === '1' ? formData[item.key_name] : '',
        USER_ID: item.type === '0' ? formData[item.key_id] : '',
        USER_NAME: item.type === '0' ? formData[item.key_name] : '',
        isDepartment: item.type,
        link: list[i].multiple === '1' ? link : '',
      })
    }
  }
  return form
}
// 提交人员信息
export const setPersonnelForm = async ({form, list, taskId, EW_RU_JOB_ID, CORP_ID, TYPE,vernier}) => {
  await addFormInfo({
        job:  processSelectedPersonnelData(form,list),
        EW_RU_TASK_ID: taskId,
        TYPE,
        postMethod: 'application/json'
      }
  )
  await resolveNextOperation({
    EW_RU_TASK_ID: taskId,
    CORP_ID,
    TYPE,
    EW_RU_JOB_ID,
    vernier
  })
}
// 提交安全措施
export const setSecurityMeasures = async ({questionnaires, questionnaireInfo, taskId, EW_RU_JOB_ID, CORP_ID, TYPE, vernier}) => {
  await setSecurityMeasuresSave({
    questionnaires: [{items: questionnaires, questionnaire: questionnaireInfo}],
    EW_RU_JOB_ID,
    EW_RU_TASK_ID: taskId,
    postMethod: 'application/json',
  })
  await resolveNextOperation({
    EW_RU_TASK_ID: taskId,
    CORP_ID,
    TYPE,
    EW_RU_JOB_ID,
    vernier
  })
}
// 提交其它安全措施
export const setOtherSecurityMeasures = async ({value, taskId, EW_RU_JOB_ID, CORP_ID, TYPE, vernier}) => {
  const ADDITIONAL_COMMENT = value.map(item => item.value)
  await setOtherSecurityMeasuresSave({
    ADDITIONAL_COMMENT,
    EW_RU_JOB_ID,
    EW_RU_TASK_ID: taskId,
    postMethod: 'application/json',
  })
  await resolveNextOperation({
    EW_RU_TASK_ID: taskId,
    CORP_ID,
    TYPE,
    EW_RU_JOB_ID,
    vernier
  })
}
// 结束当前操作人流程提交
const endCurrentPersonnelTechnologicalProcess = async ({EW_RU_TASK_ID}) => {
  await setTaskSave({
    COMPLETE_FLAG: '1',
    data: [{task: {EW_RU_TASK_ID}}],
    postMethod: 'application/json',
  })
}
// 在审批过程中指定下一节点人
export const addFlowInfo = async ({form, list, taskId, EW_RU_JOB_ID, TYPE,CORP_ID, vernier}) => {
  // 在审批过程中添加节点信息
  await addFormInfo({
        job:  processSelectedPersonnelData(form,list),
        EW_RU_TASK_ID: taskId,
        TYPE,
        postMethod: 'application/json'
      }
  )
  // 结束后续流程
  await resolveNextOperation({
    EW_RU_TASK_ID: taskId,
    CORP_ID,
    TYPE,
    EW_RU_JOB_ID,
    vernier
  })
}
// 决定下一步操作
// EW_RU_TASK_ID当前任务id
// CORP_ID选择的企业id
// TYPE作业类型
// EW_RU_JOB_ID当前操作节点的人员id
// isLastStep是否还有下一步,纯前端确定,不去后台获取
export const resolveNextOperation = async ({EW_RU_TASK_ID = '', CORP_ID = '', TYPE = '', EW_RU_JOB_ID = '',vernier = ''}, isLastStep = true) => {
  let stepNum = 0
  if (isLastStep) {
    const {info} = await getCurrentNextOperation({EW_RU_TASK_ID, EW_RU_JOB_ID, VERNIER: vernier, REQUEST_SOURCE: '1'})
    // 选人
    if (info.chooseNextFlag === '1') {
      uni.navigateTo({
        url: '/pages/eight_assignments/select_review_personnel?vernier='+ info.vernier,
        success: ({eventChannel}) => {
          eventChannel.emit('nextNodes', {
            nextNodes: info.nextNodes,
            initFlag: info.initFlag,
            taskId: EW_RU_TASK_ID,
            EW_RU_JOB_ID: EW_RU_JOB_ID,
            CORP_ID,
            TYPE
          })
        }
      })
      return
    }
    // 填写安全措施
    if (info.completeFlag === '1') {
      uni.navigateTo({
        url: '/pages/eight_assignments/security_measures?vernier=' + info.vernier,
        success: ({eventChannel}) => {
          eventChannel.emit('questionnaire', {
            questionnaire: info.questionnaire[0],
            taskId: EW_RU_TASK_ID,
            EW_RU_JOB_ID,
            TYPE,
            CORP_ID,
            vernier: info.vernier
          })
        }
      })
      return
    }
    // 填写其它安全措施
    if (info.canAddFlag === '1') {
      uni.$u.route({
        url: '/pages/eight_assignments/other_security_measures',
        params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE, CORP_ID,vernier: info.vernier}
      })
      return
    }
    // 签字
    if (info.submitFlag === '1') {
      uni.$u.route({
        url: '/pages/eight_assignments/sign',
        params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE,vernier: info.vernier}
      })
      return
    }
    // 流程特殊权限校验
    if (info.otherFlag !== null && info.otherFlag.redirectFlag === '1') {
      uni.$u.route({
        url: info.otherFlag.url,
        params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE,CORP_ID,vernier: info.vernier}
      })
      return
    }
    // 根据后端返回的页数退回到指定页面
    stepNum = info.stepNum
  }

  uni.$u.toast('提交成功')
  setTimeout(() => {
    uni.navigateBack(
        {
          delta: stepNum
        }
    )
  }, 1500)
}

export const getData = async (taskId) => {
  const resData = await getTaskInfo({ EW_RU_TASK_ID: taskId });
  if (resData.list.fromTrans && resData.list.fromTrans.length > 0) {
    const form = {};
    resData.list.fromTrans.forEach((item) => {
      form[item.ITEM_NAME] = item.ITEM_VALUE;
      if (item.FK_NAME) {
        form[item.FK_NAME] = item.FK_VALUE;
      }
      if (item.TYPE === 1) {
        form[item.ITEM_NAME] = item.list.map((item) => ({
          url: filePath + item.ITEM_VALUE,
          oldUrl: item.ITEM_VALUE
        }));
      }
      if (item.TYPE === 4) {
        form[item.ITEM_NAME] = [];
        for (let i = 0; i < item.list.length; i++) {
          form[item.ITEM_NAME].push({});
          for (let j = 0; j < item.list[i].list.length; j++) {
            form[item.ITEM_NAME][i][item.list[i].list[j].ITEM_NAME] = item.list[i].list[j].ITEM_VALUE;
            form[item.ITEM_NAME][i][item.list[i].list[j].FK_NAME] = item.list[i].list[j].FK_VALUE;
            form[item.ITEM_NAME][i]['TYPE'] = item.list[i].list[j].TYPE;
          }
        }
      }
      if (item.TYPE === 5) {
        form[item.ITEM_NAME] = filePath + item.ITEM_VALUE;
        form[item.ITEM_NAME + 'oldUrl'] = item.ITEM_VALUE;
      }
    });
    return form;
  }
};
// 针对在某些节点要新增报表信息
export const addReport = async ({form, formItems, TYPE, CORP_ID, EW_RU_TASK_ID, EW_RU_JOB_ID, vernier}) => {
    // 在审批过程中添加节点信息
    await addFormInfo({
          reports:  await processFormData(form,formItems),
          EW_RU_TASK_ID: EW_RU_TASK_ID,
          EW_RU_JOB_ID: EW_RU_JOB_ID,
          TYPE,
          postMethod: 'application/json'
        }
    )
    // 结束后续流程
    await resolveNextOperation({
      EW_RU_TASK_ID: EW_RU_TASK_ID,
      CORP_ID,
      TYPE,
      EW_RU_JOB_ID,
      vernier
    })
}