import { apiRequest } from '../utils/request';
import { Base16Encode } from '../Base16/index';

const api = '/DataRightApi';

export default {
	namespace: 'DataRight',

	state: {
		list: [],
	},

	effects: {
		*clear({ payload, callback }, { call, put }) {
			yield put({
				type: 'list',
				payload: [],
			});
			if (callback) callback();
		},
		*add({ payload, callback }, { call, put }) {
			if (payload.filterSql) {
				payload.filterSql = Base16Encode(payload.filterSql);
			}
			const response = yield call(apiRequest, api + '/add', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}

			yield put({
				type: 'nom',
				payload: response,
			});
			if (callback) callback(response);
		},
		*addBatch({ payload, callback }, { call, put }) {
			if (payload.filterSql) {
				payload.filterSql = Base16Encode(payload.filterSql);
			}
			const response = yield call(apiRequest, api + '/addBatch', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}

			yield put({
				type: 'nom',
				payload: response,
			});
			if (callback) callback(response);
		},
		*getUserRight({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/getUserRight', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}

			yield put({
				type: 'nom',
				payload: response,
			});
			if (callback) callback(response);
		},
		*getUserColumnRight({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/getUserColumnRight', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}

			yield put({
				type: 'nom',
				payload: response,
			});
			if (callback) callback(response);
		},
		*fetch({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/getList', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			yield put({
				type: 'list',
				payload: { list: response, isReference: payload.isReference },
			});
			if (callback) callback(response);
		},
		*remove({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/remove', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			yield put({
				type: 'nom',
				payload: response,
			});
			if (callback) {
				callback();
			}
		},

		*open({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/open', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			yield put({
				type: 'nom',
				payload: response,
			});
			if (callback) {
				callback();
			}
		},

		*addReference({ payload, callback }, { call, put }) {
			const response = yield call(apiRequest, api + '/addReference', payload);
			if (!response) {
				yield put({ type: 'nom' });
				return;
			}
			yield put({
				type: 'nom',
				payload: response,
			});
			if (callback) {
				callback();
			}
		},
	},

	reducers: {
		list(state, action) {
			if (action.payload.isReference) {
				return {
					...state,

					refs: action.payload.list,
				};
			} else {
				return {
					...state,
					list: action.payload.list,
				};
			}
		},
		page(state, { payload }) {
			return {
				...state,
				data: {
					list: payload.rows,
					pagination: {
						current: payload.pageNo,
						pageSize: payload.pageSize,
						total: payload.total,
					},
				},
			};
		},
		nom(state, action) {
			return { ...state };
		},
	},
};
