define(['jquery', 'dialog'], function ($, dialog) {
	// 工具类
	function Tool() {
		this.version = "1.0.0";
		this.description = "这是一个工具类";
	}
	var ajaxJsUrl = "/api";

	$.extend(Tool.prototype, {
		/**
		 * ajax post
		 * @param url (String)
		 * @param data (Json) 需要提交的数据
		 * @param cb(Function) 回调函数
		 * @param Bearer(Boolean) 是否需要Bearer,不需要传true
		 */
		doPost: function (url, data, cb, Bearer) {
			var _this = this;
			var headAttribute = '';
			if (Bearer && Bearer == true || _this.getCookie('Admin-Token') == '') {
				headAttribute = function (xhr) {
					xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8');
				}
			} else {
				headAttribute = function (xhr) {
					xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8');
					xhr.setRequestHeader('Authorization', 'Bearer ' + _this.getCookie('Admin-Token'))
				}
			}
			$.ajax({
				url: ajaxJsUrl + url + '?=' + Math.random(),
				type: 'POST',
				data: JSON.stringify(data),
				dataType: 'json',
				contentType: "application/json",
				beforeSend: headAttribute,
				success: function (data) {
					var code = data.code;
					var msg = data.msg;
					if (code === 401) {
						_this.initDialog('系统提示', '登录状态已过期，您可以继续留在该页面，或者重新登录', function () {
							_this.skip('/user/login.html')
						}, '重新登录', function () { }, "取消")
					} else if (code === 500) {
						_this.initError(msg)
						cb(data);
					} else if (code != 200) {
						_this.initError(msg)
					} else {
						cb(data);
					}
				}
			});
		},
		/**
		 * ajax get
		 * @param url(String)
		 * @param data(Json) 需要提交的数据
		 * @param cb(Function) 回调函数
		 * @param noHead(Boolean) 是否需要Bearer，不需要传true
		 */
		doGet: function (uri, data, cb, Bearer) {
			var _this = this;
			var url = ajaxJsUrl + uri + '?';
			var headAttribute = ''
			if (Bearer && Bearer == true || _this.getCookie('Admin-Token') == '') {
				headAttribute = function (xhr) {
					xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8');
				}
			} else {
				headAttribute = function (xhr) {
					xhr.setRequestHeader("Content-Type", 'application/json;charset=utf-8');
					xhr.setRequestHeader('Authorization', 'Bearer ' + _this.getCookie('Admin-Token'))
				}
			}
			if (data) {
				url += $.map(data, function (n, i) {
					if (i == data.length - 1) {
						return i + '=' + n;
					} else {
						return i + '=' + n + '&';
					}
				}).join('');
			}

			$.ajax({
				url: url,
				type: 'GET',
				beforeSend: headAttribute,
				success: function (data) {
					var code = data.code;
					var msg = data.msg;
					if (code === 401) {
						_this.initDialog('系统提示', '登录状态已过期，您可以继续留在该页面，或者重新登录', function () {
							_this.skip('/user/login.html')
						}, '重新登录', function () { }, "取消")
					} else if (code === 500) {
						_this.initError(msg)
					} else if (code != 200) {
						_this.initError(msg)
					} else {
						cb(data);
					}
				},
				error: function (data) {
					console.log(data)
				}
			});
		},

		/**
		 * 创建dialog
		 * @param id(String) 创建的dialog的Id 用于分辨唯一的dialog
		 * @param title (String) dialog的title
		 * @param content(String || HTMLElement) dialog的内容
		 * @param ok (Function) 点击确定按钮的回调函数
		 * @param cancel(Function) 点击取消按钮的回调函数
		 * 可以通过showModal来实现modal显示
		 */
		initDialog: function (title, content, ok, okValue, cancel, cancelValue, id) {
			var initDialog = dialog({
				id: id ? id : '',
				title: title,
				content: content,
				okValue: okValue ? okValue : '确定',
				ok: ok,
				cancelValue: cancelValue ? cancelValue : '取消',
				cancel: cancel,
				padding: 40,
				top: '150px'
			});
			initDialog.show();
		},
		/**
		 * 创建error dialog
		 * @param errContent
		 */
		initError: function (errContent) {
			var error = dialog({
				content: errContent,
				padding: 20
			});
			error.show();
			var time = setTimeout(function () {
				error.remove();
			}, 1500);
		},
		/**
		 * 创建dialog tips
		 * @param tips
		 * @param align
		 */
		initTips: function (tips, align, $target, times) {
			var tips = dialog({
				content: tips,
				padding: 20,
				skin: 'min-dialog tips',
				quickClose: true,
				align: align
			});
			tips.show($target);
			if (times == undefined || times == 'undefined' || times == '' || times == 'null' || times == null) {
				times = 2000
			} else {
				times = times
			}
			setTimeout(function () {
				tips.close().remove();
			}, times);
		},
		/**
		 * setCookie 设置cookie
		 * @param cname 名称
		 * @param cvalue 值
		 * @param seconds 有效期
		 */
		setCookie: function (cname, cvalue, seconds) {
			var d = new Date();
			d.setTime(d.getTime() + (seconds * 1000));
			var expires = "expires=" + d.toGMTString();
			document.cookie = cname + "=" + cvalue + "; " + expires + ";path=/";
		},
		/**
		 * getCookie 获取cookie
		 * @param cname 名称
		 */
		getCookie: function (cname) {
			var name = cname + "=";
			var ca = document.cookie.split(';');
			for (var i = 0; i < ca.length; i++) {
				var c = ca[i];
				while (c.charAt(0) == ' ') c = c.substring(1);
				if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
			}
			return "";
		},
		/**
		 * removeCookie 删除cookie
		 * @param cname 名称
		 */
		removeCookie: function (cname) {
			var exp = new Date();
			exp.setTime(exp.getTime() - 1);
			document.cookie = cname + "=; expires=" + exp.toGMTString();
		},
		/**
		 * getParam 获取url参数
		 * @param key 当前url链接
		 */
		getParam: function (key) {
			var json = {}, data;
			$.each(location.search.substr(1).split("&"), function (i, n) {
				data = n.split("=");
				json[data[0]] = data[1];
			});
			return key != undefined ? json[key] : json;
		},
		/**
		 * getParam 判断对象是否有内容
		 * @param obj 传入对象
		 */
		isEmptyObject: function (obj) {
			for (var key in obj) {
				return false;
			}
			return true;
		},
		/**
		 * skip 页面跳转
		 * @param url 跳转页面链接
		 */
		skip: function (url) {
			if (url != '') {
				window.location = url
			}
		}

	});
	return Tool;
});
