import { apiRequest } from '../utils/request';

const api = '/DataObjApi';
export default {
	namespace: 'formList',

	state: {
		list: [],
		data: {
			list: [],
			pagination: {},
		},
	},

	effects: {
		*clear({ payload, callback }, { call, put }) {
			yield put({
				type: 'clearAll',
				payload: {},
			});
		},
		*getHead({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, '/DataColumnApi/getHeaderList', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
		*tree({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/getFormDataList', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
		*getAppId({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, '/UnifiedAppFormApi/getDetailByCode', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
		*getBatchOptions({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, '/DataColumnApi/getBatchOptions', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
		*getGroupList({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, '/DataColumnApi/getGroupList', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
		*getObjDetail({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, '/DataObjApi/getDetail', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
		*fetch({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/getFormDataPage', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			yield put({
				type: 'page',
				payload: response,
			});

			if (callback) {
				callback({
					list: response.rows,
					pagination: {
						current: response.pageNo,
						pageSize: response.pageSize,
						total: response.total,
					},
				});
			}
		},
		*add({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/addFormData', {
				data: JSON.stringify(payload.params),
				isAdd: payload.isAdd,
				objId: payload.objId,
			});
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
		*delete({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/deleteFormData', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
		*getDetail({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/getFormData', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			if (callback) callback(response);
		},
	},
	reducers: {
		clearAll(state, action) {
			return {
				...state,
				data: {
					list: [],
					pagination: {},
				},
			};
		},
		list(state, action) {
			return {
				...state,
				list: action.payload,
			};
		},
		page(state, { payload }) {
			return {
				...state,
				data: {
					list: payload.rows,
					pagination: {
						current: payload.pageNo,
						pageSize: payload.pageSize,
						total: payload.total,
					},
				},
			};
		},
		nom(state, action) {
			return { ...state };
		},
	},
};