//封装好一系列常用的方法 dever
import config from './config';

//http网络请求
var http = {
	//token的key
	token : 'token',
	//获取token
	getToken: function() {
		return uni.getStorageSync('prev1_' + this.token);
	},
	
	//设置token
	setToken: function(value) {
		return uni.setStorageSync('prev1_' + this.token, value);
	},
	
	//设置http的option
	option: function(options) {
		if (!options) {
			options = {};
		}
		options[this.token] = this.getToken();
		return options;
	},
	
	//request请求
	request: function(vue, url, options, callback, err_callback) {
		var self = this;
		if (vue == 'post') {
			config.request.method = 'POST';
			vue = false;
		} else {
			config.request.method = 'GET';
		}
		if (typeof(url) == 'object') {
			vue = url[1];
			url = url[0];
		}
		if (typeof(vue) == 'object') {
			vue.isDisabled = true;
		}
		
		self.core(url, options).then((result, state) => {
			if (typeof(vue) == 'object') {
				if (!vue.fetch) {
					vue.fetch = {}
				}
				vue.isDisabled = false;
				vue.fetch = Object.assign({}, vue.fetch, result)
			}
			
			if (callback) {
				callback(result, state);
			}
		}).catch((result) => {
			if (typeof(vue) == 'object') {
				vue.isDisabled = false;
			}
			if (err_callback) {
				err_callback(result);
			} else {
				if (result.code == '2') {
					dever.location(dever.login);
				} else {
					dever.alert(result.info)
				}
			}
		})
	},
	
	core : function(url, options) {
		var self = this;
		options = this.option(options);

		if (config.server[url]) {
			config.request.url = config.server[url];
		} else {
			config.request.url = url;
		}
		var loading_method = config.request.method;
		if (options && options.page && options.page > 0) {
			loading_method = 'page';
		}
		config.request.url = config.request.host + config.request.url;
		config.request.data = options;
		return new Promise((resolve, reject) => {
			config.request.complete = (response) => {
				dever.debug(response);
				if (response.statusCode === 200) {
					if (response.data.code == '1') {
						if (options.page && options.page > 0) {
							page.state = true;
							if (page.key && response.data.data[page.key].length > 0) {
								if (options && options.concat && options.concat == -1) {
									page.data = response.data.data[page.key].concat(page.data);
								} else {
									page.data = page.data.concat(response.data.data[page.key]);
								}
								response.data.data[page.key] = page.data;
							} else if (response.data.data.length > 0) {
								if (options && options.concat && options.concat == -1) {
									response.data.data = response.data.data.reverse();
									page.data = response.data.data.concat(page.data);
								} else {
									page.data = page.data.concat(response.data.data);
								}
								response.data.data = page.data;
							} else {
								page.state = false;
								resolve(false);
								/*
								if (page.key) {
									resolve(response.data.data[page.key], false);
								} else {
									resolve(response.data.data, false);
								}
								*/
							   if (options && options.noloading) {
							   	
							   } else {
							   	dever.hideLoading(loading_method, options, url);
							   }
								return;
							}
						}
						resolve(response.data.data);
					} else if (response.data.code == '-1') {
						//退出登录
						self.setToken('');
						console.info(dever);
						dever.location('index/index', 'go');
						reject(response.data)
					} else {
						reject(response.data)
					}
					if (options && options.noloading) {
						
					} else {
						dever.hideLoading(loading_method, options, url);
					}
				} else {
					// 处理catch 请求,不在本页面之外处理,统一在这里处理
					if (options && options.handle) {
						reject(response)
					} else {
						try {
							Promise.reject(response).catch(err => {
								self.error(response.statusCode || response.errMsg);
							});
						} catch (e) {
							dever.alert(e)
						}
					}
					if (options && options.noloading) {
						
					} else {
						dever.hideLoading(loading_method, options, url);
					}
				}
			}
			//uni.request(Object.assign({}, config, options));
			dever.debug(config.request);
			if (options.noloading) {
				
			} else {
				dever.loading(loading_method, options, url);
			}
			
			uni.request(config.request);
		})
	},
	
	error : function(err) {
		//console.error("请求背拒绝" + err)
		/*
		dever.data('web_error', err);
		var path = '/components/dever/pages/web_error';

		uni.navigateTo({
			url: path
		})
		return;
		*/

		switch (err) {
			case 401:
				// 错误码404的处理方式
				console.error("请求背拒绝" + err)
				break;
			case 404:
				// 错误码404的处理方式
				console.error("没有找到页面"  + err)
				break;
			case 500:
				// 错误码404的处理方式
				console.error("500服务器错误"  + err)
				break;
			case 405:
				console.error("错误的请求"  + err)
				break;
		}
	},
}

var im = {
	socket : false,
	init : function() {
		this.connect();
		this.info();
	},
	
	connect : function() {
		uni.connectSocket({
			url: 'text://me.5dev.cn:8282',
			complete: (res)=> {
				console.log(res);
			}
		});
		uni.onSocketOpen(function (res) {
		  console.log('WebSocket连接已打开!');
		});
		uni.onSocketError(function (res) {
		  console.log('WebSocket连接打开失败,请检查!');
		});
		
	},
	
	info : function() {
		console.info(222);
		uni.onSocketMessage(function (res) {
			console.log('收到服务器内容:' + res.data);
		});
	}
}

var page = {
	//分页控制
	value : 1,
	//分页数据
	data : [],
	//分页所属的key
	key : '',
	//分页状态 true可以分页,false不能分页
	state : true,
	
	//通用的获取数据方法:瀑布流分页 (1,'level')
	get : function(config, vue, url, options, callback, err_callback) {
		options = http.option(options);
		if (typeof(config) == 'object') {
			var state = config[0];
			this.key = config[1];
		} else {
			var state = config;
			this.key = '';
		}
		if (state == 1) {
			this.value = 1;
			this.data = [];
		} else {
			this.value++;
		}
		
		if (this.state == false && state != 1) {
			return;
		}
		
		options.page = this.value;
		http.request(vue, url, options, callback, err_callback);
	},
}

var upload = {
	data : {},
	handle : function(key, count, callback) {
		if (!count) {
			count = 1;
		}
		var type = 1;
		if (count > 1) {
			type = 2;
		}
		var self = this;
		count = parseInt(count);
		uni.chooseImage({
			count: count,
			sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
			sourceType: ['album'], //从相册选择
			success: res => {
				uni.showLoading();
				res.tempFilePaths.forEach(function(item, index) {
					//请求上传接口
					uni.uploadFile({
						url: config.upload.url, //仅为示例,非真实的接口地址
						filePath: item,
						name: config.upload.name,
						formData: { token: http.getToken() },
						success: res => {
							dever.debug(res);
							var data = JSON.parse(res.data);
							uni.hideLoading();
							if (data.uploaded) {
								var backUrl = data.url;
								if (count > 1) {
									if (!self.data[key]) {
										self.data[key] = [];
									}
									self.data[key].push(backUrl);
								} else {
									self.data[key] = backUrl;
								}
								if (callback) {
									callback(type, self.data[key]);
								}
							} else if (data.uploaded == false) {
								uni.showToast({ title: data.error.message, icon: 'none' });
							}
						}
					});
				});
			},
			fail: () => {
				uni.showToast({ title: '图片上传失败,请重试', icon: 'none' });
				uni.hideLoading();
			}
		});
	},
	
	upfile : function(e, key, count, callback, ext, title, style) {
		if (!count) {
			count = 1;
		}
		var type = 1;
		if (count > 1) {
			type = 2;
		}
		if (!title) {
			title = '点击这里上传文件';
		}
		var self = this;
		count = parseInt(count);
		var a = document.createElement('button');
		a.className = 'file';
		if (style) {
			a.style.cssText = style;
		} else {
			a.style.cssText = 'padding: 4px 10px;height: 20px;line-height: 20px;position: relative;cursor: pointer;color: #888;background: #fafafa;border: 1px solid #ddd;border-radius: 4px;overflow: hidden;display: inline-block;*display: inline;*zoom: 1;';
		}
		var style = 'position: absolute;opacity: 0;filter: alpha(opacity=0);cursor: pointer';
		a.innerHTML = '<input style="'+style+'" type="file" name="upload_file" id="upload_file" />' + title;
		e.$refs.input.$el.appendChild(a)
		var input = document.getElementById('upload_file');
		
		input.onchange = (event) => {
			uni.showLoading();
			var reader = new FileReader();
			var type = input.files[0].type;
			var temp = type.split('/');
			type = temp[1];
			//console.info(input.files[0]);
			if (ext && ext.indexOf(type) == -1) {
				uni.showToast({ title: '您上传的文件类型错误,请上传带有' + ext + '这些后缀的文件', icon: 'none' });
			} else {
				reader.readAsDataURL(input.files[0]);
				reader.onload = function(){
					//读取完成后,数据保存在对象的result属性中
					var pic = this.result;
					var temp = pic.split('base64,');
					pic = temp[1];
					dever.debug(pic);
					var url = "http://up.qiniu.com/putb64/-1";
					var xhr = new XMLHttpRequest();
					xhr.onreadystatechange=function(){
						if (xhr.readyState==4){
							dever.debug(xhr.responseText);
							var data = JSON.parse(xhr.responseText);
							uni.hideLoading();
							if (data.uploaded) {
								var backUrl = data.url;
								if (count > 1) {
									if (!self.data[key]) {
										self.data[key] = [];
									}
									self.data[key].push(backUrl);
								} else {
									self.data[key] = backUrl;
								}
								if (callback) {
									callback(type, self.data[key], input.files[0]);
								}
							} else if (data.uploaded == false) {
								uni.showToast({ title: data.error.message, icon: 'none' });
							}
						}
					}
					xhr.open("POST", url, true); 
					xhr.setRequestHeader("Content-Type", "application/octet-stream");
					xhr.setRequestHeader("Authorization", "UpToken " + e.token);
					xhr.send(pic);
				}
			}
			
		}
	},
	
	qiniu : function(qn, config, key, count, callback) {
		if (!count) {
			count = 1;
		}
		var type = 1;
		if (count > 1) {
			type = 2;
		}
		var self = this;
		count = parseInt(count);
		uni.chooseImage({
			count: count,
			sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
			sourceType: ['album'], //从相册选择
			success: res => {
				uni.showLoading();
				res.tempFilePaths.forEach(function(item, index) {
					//请求上传接口
					qn.upload(
						item,
						res => {
							dever.debug(res);
							var data = res;
							uni.hideLoading();
							if (data.uploaded) {
								var backUrl = data.url;
								if (count > 1) {
									if (!self.data[key]) {
										self.data[key] = [];
									}
									self.data[key].push(backUrl);
								} else {
									self.data[key] = backUrl;
								}
								if (callback) {
									callback(type, self.data[key]);
								}
							} else if (data.uploaded == false) {
								uni.showToast({ title: data.error.message, icon: 'none' });
							}
						},
						error => {
							uni.showToast({ title: '图片上传失败,请重试', icon: 'none' });
							uni.hideLoading();
						},
						{
							region: 'ECN',
							domain: config.upload,
							//key: key,
							uptoken: config.token
						},
						res => {
								//上传进度
							if(res.progress === 100){
								//resolve(keys);
							}
						}
					);
				});
			},
			fail: () => {
				uni.showToast({ title: '图片上传失败,请重试', icon: 'none' });
				uni.hideLoading();
			}
		});
	},
	
	uploadDel : function(key, index, callback) {
		var self = this;
		uni.showModal({
			content: '确定要删除吗?',
			cancelText: '取消',
			confirmText: '确定',
			success: res => {
				if (res.confirm) {
					// self.data[key].splice(index, 1);
					if (callback) {
						callback(res, index);
					}
				}
			}
		});
	}
}

var dever = {
	login : 'login/login?refer=-1',
	web_view : '/dever/pages/web_view',
	source : 'h5',
	host : '',
	doc : false,
	config : {},
	vue : false,
	cur : false,
	getLoadingState : {},
	getLoadingCall : false,
	postLoadingCall : false,
	pageLoadingCall : false,
	lastGetUrl : '',
	showLoad : false,
	btnText : '确定提交',
	switchTab : [],
	switchTabCall : {},
	
	//获取当前时间戳
	curTime : function() {
		var time = Date.parse(new Date())/1000;
		return time;
	},
	//载入全局配置
	init : function(url, vue, value, set) {
		this.vue = vue;
		vue.prototype.$config = value;
		var self = this;
		var config = self.data('dever_config');
		var state = false;
		if (config && !set) {
			self.config = config;
			vue.prototype.$config = self.config;
			if (self.config.update_time) {
				var time = this.curTime();
				if (!self.config.update_time || time - self.config.update_time >= value.set_update) {
					state = true;
				}
			} else {
				state = false;
			}
			
		} else {
			state = true;
		}

		if (state) {
			
			if (url) {
				self.post(url, {noloading:1}, function(t) {
					self.config = t;
					self.config.update_time = self.curTime();
					self.data('dever_config', self.config);
					vue.prototype.$config = self.config;
				});
			} else {
				self.config = value;
				vue.prototype.$config = self.config;
				self.data('dever_config', self.config);
			}
		}
		
		return this;
	},
	//加载通用的方法
	common : function(func) {
		this.source = 'h5';
		this.host = '';
		//#ifdef H5
		this.source = 'h5';
		this.host = window.location.protocol + '//' + window.location.host + '/#';
		//#endif
		//#ifdef APP-PLUS
		this.source = 'app';
		//#endif
		//#ifdef MP-WEIXIN
		this.source = 'applet';
		//#endif
		
		if (func) {
			for (var i in func) {
				this.vue.prototype[i] = func[i];
			}
		}
	},
	//设置提交的按钮
	btnLoad : function(cur) {
		if (!cur) {
			cur = this.cur;
		}
		if (!cur) {
			return;
		}
		cur.btn = this.btn(cur);
	},
	//设置提交的按钮
	btnFinish : function() {
		var cur = this.cur;
		if (!cur) {
			return;
		}
		cur.btn = {
			disabled:false,
			loading:false,
			text:this.btnText,
		};
	},
	//设置提交的按钮
	btn : function(cur, text) {
		this.cur = cur;
		if (text) {
			this.btnText = text;
		}
		return {
			disabled:true,
			loading:true,
			text:'加载中...',
		};
	},
	//设置loading
	setGetLoading : function(yes, no) {
		this.getLoadingCall = {'yes': yes, 'no' : no};
	},
	setPostLoading : function(yes, no) {
		this.postLoadingCall = {'yes': yes, 'no' : no};
	},
	setPageLoading : function(yes, no) {
		this.pageLoadingCall = {'yes': yes, 'no' : no};
	},
	//获取当前route
	route : function() {
		var page = this.getPage();
		if (!page) {
			return '';
		}
		var route = page.route;
		return route;
	},
	//获取当前page
	getPage : function() {
		var pages = getCurrentPages();
		if (pages.length > 0) {
			return pages[pages.length - 1];
		} else {
			return false;
		}
	},
	//loading
	loading : function(method, options, url) {
		var state = false;
		if (method == 'POST') {
			if (this.postLoadingCall && this.postLoadingCall.yes) {
				state = true;
				var callback = this.postLoadingCall.yes;
				callback(this);
			}
		} else if (method == 'page') {
			state = true;
			if (options.page && options.page > 1) {
				state = false;
			}
			if (this.pageLoadingCall && this.pageLoadingCall.yes) {
				state = true;
				var callback = this.pageLoadingCall.yes;
				callback(this);
			}
		} else {
			url = this.route();
			if (this.lastGetUrl && this.lastGetUrl != url && this.getLoadingState[this.lastGetUrl]) {
				this.getLoadingState[this.lastGetUrl] = false;
			}
			if (this.getLoadingState && this.getLoadingState[url]) {
				state = false;
			} else {
				if (this.getLoadingCall && this.getLoadingCall.yes) {
					state = true;
					var callback = this.getLoadingCall.yes;
					callback(this);
				}
			}
		}
		if (!state) {
			uni.showLoading({title: '加载中', mask: true});
			//uni.showNavigationBarLoading();
			this.showLoad = true;
		}
		uni.stopPullDownRefresh();
	},
	//取消loading
	hideLoading : function(method, options, url) {
		var state = false;
		if (method == 'POST' || method == 'post') {
			if (this.postLoadingCall && this.postLoadingCall.no) {
				state = true;
				var callback = this.postLoadingCall.no;
				callback(this);
			}
		} else if (method == 'page') {
			state = true;
			if (options.page && options.page > 1) {
				state = false;
			}
			if (this.pageLoadingCall && this.pageLoadingCall.no) {
				state = true;
				var callback = this.pageLoadingCall.no;
				callback(this);
			}
		} else {
			url = this.route();
			if (!this.lastGetUrl || (this.lastGetUrl && this.lastGetUrl != url)) {
				this.lastGetUrl = url;
			}
			if (this.getLoadingState && this.getLoadingState[url]) {
				state = false;
			} else {
				this.getLoadingState[url] = true;
				if (this.getLoadingCall && this.getLoadingCall.no) {
					state = true;
					var callback = this.getLoadingCall.no;
					callback(this);
				}
			}
		}
		
		if (!state && this.showLoad) {
			uni.hideLoading();
			this.showLoad = false;
			this.btnFinish();
			//uni.hideNavigationBarLoading();
		}
	},
	//data数据获取
	dataset : function(e) {
		if (e.currentTarget) {
			var dataset = e.currentTarget.dataset;
		} else {
			var dataset = e.target.dataset;
		}
		
		return dataset;
	},
	//view中的页面提示
	viewAlert : function(e) {
		if (e) {
			var dataset = this.dataset(e);
			var msg = dataset.msg;
			var icon = dataset.icon;
			var callback = dataset.callback;
			
			this.alert(msg, icon, callback);
		} else {
			this.alert('敬请期待');
		}
	},
	//view中的页面跳转
	viewLocation : function(e) {
		var page = '';
		var to = '';
		var option = '';
		if (e) {
			var dataset = this.dataset(e);
			page = dataset.page;
			to = dataset.to;
			option = []
			
			for (var i in dataset) {
				if (i != 'page' && i != 'to') {
					option.push(i + '=' + dataset[i]);
				}
			}
			if (option) {
				option = option.join('&');
			}
		}
		
		if (!page) {
			uni.navigateBack({});
		} else {
			var go = '';
			if (to) {
				go = 'to';
			}
			if (option) {
				page = page + '?' + option;
			}
			this.location(page, go);
		}
	},
	//页面跳转
	location : function(path, go) {
		var self = this;
		if (path.indexOf('http') > -1) {
			this.debug('http:' + path);
			this.data('web_view', path);
			if (this.source == 'app' || this.source == 'applet') {
				uni.navigateTo({
					url: this.web_view
				})
			} else {
				if (!go) {
					go = '';
				}
				if (go && go == 'location') {
					window.location.href = path;
				} else {
					var url = window.location.href;
					if (go.indexOf('/') != -1) {
						url = this.host + go
					} else {
						url = url + go;
					}
					url = window.btoa(url);
					if (path.indexOf('?') == -1) {
						path = path + '?';
					} else {
						path = path + '&';
					}
					window.location.href = path + 'refer=' + url;
				}
			}
		} else {
			this.debug('navigateTo:' + go + ':' + path);
			if (this.switchTab.indexOf(path) != -1) {
				uni.switchTab({
					url: '/pages/' + path,
					success: function(e) {
						if (self.source != 'app' && self.switchTabCall[path]) {
							var call = self.switchTabCall[path];
							call(self, e);
						}
					}
				})
			} else if (go) {
				uni.redirectTo({
					url: '/pages/' + path
				})
			} else {
				uni.navigateTo({
					url: '/pages/' + path
				})
			}
		}
	},
	
	//提示信息
	alert : function(info, icon, callback) {
		if (!icon) {
			icon = 'none'
		}
		if (info) {
			uni.showToast({title: info, icon: icon});
		}
		this.debug('alert:' + info)
		if (callback) {
			this.debug('callback:' + callback)
			setTimeout(function(){
				callback();
			}, 1000)
		}
	},
	
	//debug调试
	debug : function(string) {
		if (config.base.debug) {
			this.log(string);
		}
	},
	
	//记录日志
	log : function(string) {
		console.log(string);
	},
	
	//获取token
	getToken: function() {
		return http.getToken();
	},
	
	//设置token
	setToken: function(value) {
		return http.setToken(value);
	},
	
	//通用的提交数据的方法
	post : function(url, options, callback, err_callback) {
		http.request('post', url, options, callback, err_callback);
	},
	
	//通用的获取数据方法
	get : function(vue, url, options, callback, err_callback) {
		http.request(vue, url, options, callback, err_callback);
	},
	
	//通用的获取数据方法
	page : function(config, vue, url, options, callback, err_callback) {
		page.get(config, vue, url, options, callback, err_callback);
	},

	//上传
	upload : function(id, count, callback) {
		upload.handle(id, count, callback);
	},
	
	//上传
	qiniu : function(qn, self, id, count, callback) {
		upload.qiniu(qn, self, id, count, callback);
	},
	
	//上传文件
	upfile : function(self, key, count, callback, ext, title, style) {
		upload.upfile(self, key, count, callback, ext, title, style);
	},
	
	//im聊天
	im : function() {
		im.init();
	},
	
	//删除上传
	uploadDel : function(id, index, callback) {
		upload.uploadDel(id, index, callback);
	},
	
	//验证登录
	checkLogin : function() {
		if (!this.getToken()) {
			//this.hideLoading();
			if (this.source == 'h5') {
				this.location(this.login);
			} else {
				this.location(this.login, 'go');
			}
		}
	},
	
	//数据存储
	data : function(key, value) {
		if (value) {
			if (value == 'del') {
				uni.removeStorageSync(key);
				return true;
			} else {
				uni.setStorageSync(key, value);
				return value;
			}
		} else {
			return uni.getStorageSync(key);
		}
	},
	
	//插入html代码,初始化
	initHtml : function(doc) {
		this.doc = doc.$refs.initHtml.$el;
	},
	
	//插入html代码
	html : function(html) {
		var self = this;
		var div = document.createElement('div');
		div.innerHTML = html;
		this.doc.appendChild(div);
		var scripts = div.querySelectorAll('script');
		return Array.prototype.slice.apply(scripts).reduce((chain, script) => {
			return chain.then(() => self.runScript(script));
		}, Promise.resolve());
	},
	
	//微信提醒
	wxTip : function() {
		var wx = this.is_weixin();
		if (wx) {
			var tip = '<div id="weixin-tip" style="position: fixed; left:0; top:0; background: rgba(0,0,0,0.8); filter:alpha(opacity=80); width: 100%; height:100%; z-index: 100;"  onclick="document.getElementById(\'weixin-tip\').remove()"><p style="text-align: center; margin-top: 10%; padding:0 5%;"><img src="static/dever/live_weixin.png" alt="微信打开" style="max-width: 100%; height: auto;"/></p></div>';
			this.html(tip);
			return true;
		}
		return false;
	},
	
	is_weixin: function() {
		if (this.source != 'h5') {
			return false;
		}
		var ua = navigator.userAgent.toLowerCase();  
		if(ua.match(/MicroMessenger/i)=="micromessenger") {  
			return true;  
		} else {  
			return false;  
		}
	},
	
	//执行script代码
	runScript : function(script) {
		return new Promise((reslove, rejected) => {
			const newScript = document.createElement('script');
			newScript.innerHTML = script.innerHTML;
			const src = script.getAttribute('src');
			if (src) newScript.setAttribute('src', src);
			// script 加载完成和错误处理
			newScript.onload = () => reslove();
			newScript.onerror = err => rejected();
			document.head.appendChild(newScript);
			document.head.removeChild(newScript);
			if (!src) {
				// 如果是 inline script 执行是同步的
				reslove();
			}
	  })
	},
	
	//app支付
	appPayment : function(type, order, callback, errorCallback) {
		uni.requestPayment({
		    provider: type,
		    orderInfo: order, //微信、支付宝订单数据
		    success: function (res) {
		        //console.log('success:' + JSON.stringify(res));
				callback(res);
		    },
		    fail: function (err) {
		        //console.log('fail:' + JSON.stringify(err));
				errorCallback(err)
		    }
		});
	},
	
	//跳转到refer
	jump : function() {
		var refer = this.data('login_refer');
		var id = this.data('invite_id');
		var type = this.data('invite_type');
		if (id && refer != 'index/index') {
			refer = refer + '?id=' + id + '&type=' + type;
		}
		this.data('login_refer', 'del');
		this.data('invite_id', 'del');
		this.data('invite_type', 'del');
		if (!refer) {
			refer = 'index/index';
		}
		this.location(refer, 'go');
	},
	//转星号
	xing : function(s) {
		return s.replace(s, function(sMatch){
			return sMatch.replace(/./g,"*");
		});
	},
	
	//检查更新
	checkUpdate : function() {
		this.update();
	},
	update : function(path, call) {
		var self = this;
		var source = this.source;
		if (source != 'app') {
			return;
		}
		var type = plus.os.name.toLowerCase();
		//var type = 'android';
		//var config = this.config.version;
		
		self.post('isUpdate', {t:1}, function(res) {
			if (type == 'android') {
				res.downloadUrl = res.androidUrl;
			} else {
				res.downloadUrl = res.iosUrl;
			}
			self.data('dever_update_link', res.downloadUrl);
			if (plus.runtime.versionCode < res.versionCode) {
				//强制更新
				var txt = '正在为您下载更新,下载完成将重启应用';
				if (res.forceUpdate == true) {
					self.down(res, res.downloadUrl, txt, type);
				} else if(call) {
					call(res, txt, type);
				} else {
					uni.showModal({
					    title: '发现新版本',
					    content: '有新版本可用 (版本号:' + res.versionName + '),请问您是否更新?',
					    success: (t) => {
					        if (t.confirm) {
								if (path) {
									self.location(path);
								} else {
									self.down(res, res.downloadUrl, txt, type);
								}
					        }
					    }
					})
				}
			}
		});
	},
	uploadCall : function(config, type, packgePath) {
		// 保存更新记录到stroage,下次启动app时安装更新
		var self = this;
		self.data('dever_update', 1);
		self.data('dever_update_down', packgePath);
		// 任务完成,关闭下载任务,开始安装
		plus.runtime.install(packgePath, {force: true}, function() {
			self.data('dever_update', 2);
			self.data('dever_update_down', 'del');
			uni.showModal({
			  title: '提示',
			  content: '应用将重启以完成更新',
			  showCancel: false,
			  complete: () => {
				plus.runtime.restart();
			  }
			})
		});
	},
	down : function(config, url, txt, type, call) {
		if (!url) {
			return false;
		}
		if (txt) {
			this.alert(txt);
		}
		if (type != 'android' && !url.match(RegExp(/.wgt/))) {
			plus.runtime.openURL(url);
			return false;
		}
		var self = this;
		var packgePath = self.data('dever_update_down');
		if (packgePath) {
			self.uploadCall(config, type, packgePath);
			return false;
		}
		var downloadTask = uni.downloadFile({
		    url: url,
		    success: (res) => {
		        if (res.statusCode === 200) {
		            // 保存下载的安装包
		            uni.saveFile({
		                tempFilePath: res.tempFilePath,
		                success: (res) => {
		                    var packgePath = res.savedFilePath;
							if (call) {
								call();
							}
		                    self.uploadCall(config, type, packgePath);
							downloadTask.abort();
							downloadTask = null;
		                }
		            })
		        }
		    }
		});
		return downloadTask;
	},
	
	//截取APP退出功能
	quit : function(page, call) {
		var self = this;
		if (self.source == 'app') {
			var main = plus.android.runtimeMainActivity();
			//为了防止快速点按返回键导致程序退出重写quit方法改为隐藏至后台 
			/*
			plus.runtime.quit = function(){  
				main.moveTaskToBack(false);  
			};  
			*/
			//重写toast方法如果内容为 ‘再按一次退出应用’ 就隐藏应用,其他正常toast  
			plus.nativeUI.toast = (function(str){  
				if(str == '再按一次退出应用') {
					if (call) {
						call(main);
					} else {
						var webview = page.$mp.page.$getAppWebview();
						var child = webview.children();
						child[0].back();
					}
					
					return false;  
				}else{  
					self.alert(str);
				}  
			});
		}
	}
}

module.exports = dever