/**
 * 徐立
 * 2019年9月20日
 * 事务相关接口
 */
import {uaaRequest} from '../utils/request';
import {Base16Encode} from "../Base16/index"

const api = '/UnifiedAppFormApi';
const myCollect = {
  namespace: 'affair',
  state: {
    user: {}, // 用户数据
    todoListApps: [],
  },
  effects: {
    /**
     * 获取待办分页
     * @param {pageSize} 每页大小
     * @param {appId} 应用id
     * @param {pageNo} 页码
     */
    * getBacklog({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/getWaitPage`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      } else {
        const appIds = new Set();
        response?.rows?.map((x) => {
          appIds.add(x.appId);
          return null;
        });
        yield put({type: 'todoList', payload: {
          todoListApps: Array.from(appIds),
          },
        });
      }
      if (callback && typeof callback === 'function') {
        callback(response);
      }
    },
    /**
     * 获取已办分页
     * @param {pageSize} 每页大小
     * @param {appId} 应用id
     * @param {pageNo} 页码
     */
    * getHaveDone({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/getHandledPage`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 获取草稿分页
     * @param {pageSize} 每页大小
     * @param {appId} 应用id
     * @param {pageNo} 页码
     */
    * getDraft({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/getDraftPage`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 获取申请分页
     * @param {pageSize} 每页大小
     * @param {appId} 应用id
     * @param {pageNo} 页码
     */
    * getApply({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/getApplyPage`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    * getData({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/getData`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 审批流程
     * @param {taskId} 任务id
     * @param {examineMap} 审核内容
     */
    * getExamineProcess({payload, callback}, {call, put}) {
      if (payload.taskForm) {
        payload.taskForm = Base16Encode(payload.taskForm);
      }
      const response = yield call(uaaRequest, `${api}/examineProcess`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 根据id获得表单详情
     * @param {id} 表单id
     */
    * getIdFormDetail({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/getFormDetail`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 删除草稿
     * @param {ids } 表单ids
     */
    * removeDraft({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/removeDraft`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 撤销流程
     * @param {id} 表单id
     */
    * revokeProcess({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/revokeProcess`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 保存或修改草稿
     * @param {appId} 应用id
     * @param {id} 表单id
     * @param {content} 表单内容
     * @param {title} 表单标题
     */
    * saveDraft({payload, callback}, {call, put}) {
      if (payload.content) {
        payload.content = Base16Encode(payload.content);
      }
      const response = yield call(uaaRequest, `${api}/saveDraft`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 发起流程
     * @param {appId} 应用id
     * @param {id} 表单id
     * @param {content} 表单内容
     * @param {title} 表单标题
     */
    * startProcess({payload, callback}, {call, put}) {
      if (payload.content) {
        payload.content = Base16Encode(payload.content);
      }
      const response = yield call(uaaRequest, `${api}/startProcess`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    * startProcessByService({payload, callback}, {call, put}) {
      if (payload.content) {
        payload.content = Base16Encode(payload.content);
      }
      const response = yield call(uaaRequest, `${api}/startProcessByService`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    * getHandleUser({payload, callback}, {call, put}) {
      if (payload.content) {
        payload.content = Base16Encode(payload.content);
      }
      const response = yield call(uaaRequest, `${api}/getHandleUser`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 获取应用列表字段信息
     * @param {id} 表单id
     */
    * getFormTitle({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/getFormTitle`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },
    /**
     * 获取数据字段
     * @param payload
     * @param callback
     * @param call
     * @param put
     * @returns {IterableIterator<*>}
     */
    * getDataTitle({payload, callback}, {call, put}) {
      const response = yield call(uaaRequest, `${api}/getDataTitle`, {
        ...payload,
      });
      if (response == null) {
        yield put({type: 'nom'});
        return;
      }
      if (callback) {
        callback(response);
      }
    },

  },
  reducers: {
    nom(state, action) {
      return {...state};
    },
    todoList(state,  { payload }) {
      return {
        ...state,
        todoListApps: payload.todoListApps,
      }
    },
  },
};
export default myCollect;