import request from '@/service/request';
import { baseUrl } from '@/config/env';

export class BaseService {
	constructor() {
		const crud = {
			page: 'list',
			list: 'list',
			info: 'detail',
			add: 'add',
			delete: 'delete',
			update: 'update'
		};

		if (!this.permission) {
			this.permission = {};
		}

		for (let i in crud) {
			if (this.namespace) {
				this.permission[i] = this.namespace.replace(/\//g, ':') + ':' + crud[i];
			} else {
				this.permission[i] = crud[i];
			}
		}
	}

	request(options = {}) {
		if (!options.params) {
			options.params = {};
		}

		let path = '';

		if (process.env.NODE_ENV == 'development') {
			path = this.proxy || baseUrl;
		} else {
			if (this.proxy) {
				path = this.url;
			} else {
				path = baseUrl;
			}
		}

		if (this.namespace) {
			path += '/' + this.namespace;
		}

		options.url = path + options.url;

		console.log(`[${options.method || 'GET'}]`, options.url);
		return request(options);
	}

	list(params) {
		return this.request({
			url: '/list',
			params: {
				...params
			}
		}).then(res => {
			return {
				...res,
				pagination: {
					totalPage: res.totalPage,
					total: parseInt(res.totalNum)
				}
			};
		});
	}

	page(params) {
		return this.request({
			url: '/list',
			params: {
				...params
			}
		}).then(res => {
			return {
				...res,
				pagination: {
					totalPage: res.totalPage,
					total: parseInt(res.totalNum)
				}
			};
		});
	}

	info(params) {
		return this.request({
			url: '/detail',
			params: {
				...params
			}
		});
	}

	update(params) {
		return this.request({
			url: '/update',
			method: 'POST',
			data: {
				...params
			}
		});
	}

	delete(params) {
		return this.request({
			url: '/delete',
			method: 'POST',
			data: {
				...params
			}
		});
	}

	add(params) {
		return this.request({
			url: '/add',
			method: 'POST',
			data: {
				...params
			}
		});
	}
}
