(function () {
	var prId;
	var startTime;
	var endTime;
	var typeIds = [];
	var typeNames = [];
	var ddNumber;
	var interval;
	var intervalDesc;
	var locName;
	// Add start 2018/8/23 14:00 kangzhi
	// 将筛选页面传递的选中的‘选择查看类型曲线’的数据保存在 typeChartName 中
	var typeChartName;
	// Add end 2018/8/23 14:00 kangzhi

	/**
	 * 根据id清空所有子元素
	 */
	function clearAllChildren(id) {
		var tobeRemoved = $("#" + id);
		tobeRemoved.empty();
	}

	/**
	 * 显示右侧边栏
	 */
	function showRightPanel() {
		api.openDrawerPane({
			type: 'right'
		});
	}

	/**
	 * 弹出提示框
	 */
	function toast(msg) {
		api.toast({
			msg: msg,
			duration: 5000,
			locaiton: 'top'
		});
	}

	/**
	 * 格式化moment对象
	 */
	function momentFormat(date, format) {
		if (format) {
			return date.format(format);
		}
		return date.format("YYYY-MM-DD");
	}

	/**
	 * 设置默认起止时间
	 * 默认开始时间为前两天零时
	 * 默认结束时间为前一天23:59:59
	 */
	function resetDefaultDateTime() {
		startTime = moment().subtract(2, 'days').startOf('day');
		endTime = moment().subtract(1, 'days').endOf('day');
	}

	/**
	 * 更新界面上的起止时间
	 */
	function updateDateTimeView() {
		$("#lbStartTime").html(momentFormat(startTime));
		$("#lbEndTime").html(momentFormat(endTime));
	}

	/**
	 * 界面显示完成，通知侧栏开始加载数据
	 */
	function viewAppear(ret, err) {
		api.sendEvent({ name: "historyLoadData" });
	}

	/**
	 * 向表格中插入一行时间
	 */
	function addTime(time) {
		time = time.slice(5);

		var template = '<tr><td>{time}</td></tr>';
		template = template.replace("{time}", time);

		$("#timeColumn").append(template);
	}

	/**
	 * 向表格插入一类表头
	 */
	function addHeaderItem(headerItem) {
		var templateHead = '<td colspan="{col}">{name}</td>';
		templateHead = templateHead.replace("{col}", headerItem.vars.length);
		templateHead = templateHead.replace("{name}", headerItem.categotyName);

		$("#table-header-list").append(templateHead);

		var templateTitle = '<td>{title}</td>';
		var titleList = $("#table-title-list");
		for (var i = 0; i < headerItem.vars.length; i++) {
			var item = headerItem.vars[i];
			var title = item.tagKey + (item.unit ? '(' + item.unit + ')' : '' );
			titleList.append(templateTitle.replace("{title}", title ));
		}
	}

	/**
	 * 检查日期是否合法
	 */
	function checkDate() {
		//起止日期不能是未来时间
		var endOfToday = moment().endOf("day");
		var tmpEndTime = endTime.clone().startOf("day");
		if (endOfToday.isBefore(tmpEndTime) || endOfToday.isBefore(startTime)) {
			toast("起止日期不能是未来时间");
			return false;
		}
		//结束日期不能比起始日期早
		if (!endTime.isAfter(startTime)) {
			toast("结束日期不能比起始日期早");
			return false;
		}
		//天 366天    小时 30分  7天    15分钟5分钟30秒1天
		//按天查询，最多查询366天
		if (interval >= 86400) {
			//按天查询时，时间跨度不能超过一年
			if (endTime.diff(startTime, 'days') > 366) {
				toast("按天查询时，时间跨度不能超过一年");
				return false;
			}
		} else if (interval >= 1800) {
			//按小时及30分钟查询查询，时间跨度不能超过7天
			if (endTime.diff(startTime, 'days') > 7) {
				toast("按小时及30分钟查询时，时间跨度不能超过7天");
				return false;
			}
		} else {
			//按分钟及秒查询时，时间跨度不能超过1天
			if (endTime.diff(startTime, 'seconds') > 86400) {
				toast("按分钟及秒查询时，时间跨度不能超过1天");
				return false;
			}
		}

		return true;
	}

	/**
	 * 检查类型选择是否正确
	 * 类型至少选择一项
	 */
	function checkType() {
		if (typeIds && typeIds.length > 0) {
			return true;
		}
		toast("筛选类型必须至少选择一项");
		return false;
	}

	/**
	 * 请求历史数据
	 */
	function queryData() {
		//检查日期是否合法
		if (!checkDate()) {
			return;
		}
		//检查类型选择是否正确
		if (!checkType()) {
			return;
		}

		//显示载入动画
		api.showProgress({
			title: '载入中...',
			text: '请稍后',
			modal: false
		});

		//当结束时间在未来时，将结束时间替换为当前时间
		var endTimeValue = endTime.valueOf();
		var nowTimeValue = moment().valueOf();

		var url = '/edp/rest/data/ai/history';
		var args = {
			prId: prId,
			categoryKeys: typeIds,
			ddNum: ddNumber,
			startTime: startTime.valueOf(),
			endTime: endTimeValue > nowTimeValue ? nowTimeValue : endTimeValue,
			interval: interval,
			flag: 1 // 1.查询历史
		};

		$api.get(url, args, function (data, err) {
			//隐藏载入动画
			api.hideProgress();
			if (err) {
				toast("网络请求失败");
			} else {
				if (!data.code || data.code != "200") {
					toast("服务器响应错误" + (data.code ? ("，错误码：" + data.code) : ""));
				} else {
					if (data.body && data.body.timeList && data.body.categories) {
						data = data.body;

						// Add start 2018/8/23 14:01 kangzhi
						// 初始化 echarts 表
						initechart(data);
						// Add end 2018/8/23 14:01 kangzhi

						//清空界面上的时间列表
						clearAllChildren("timeColumn");
						for (var i = 0; i < data.timeList.length; i++) {
							var time = moment(data.timeList[i]).format('YYYY-MM-DD hh:mm:ss');
							addTime(time);
						}
						//清空表头
						clearAllChildren("table-header-list");
						clearAllChildren("table-title-list");

						$("#header-table").width(0);

						for (var i = 0; i < data.categories.length; i++) {
							var head = data.categories[i];
							addHeaderItem(head);
						}
						//清空表格中的值
						clearAllChildren("tbHistroyValue");
						var historyValueTable = $("#tbHistroyValue");
						historyValueTable.width(0);
						var rowCount = data.timeList.length;
						for (var i = 0; i < rowCount; i++) {
							//生成第一行的数据
							var row = '<tr>';
							for (var j = 0; j < data.categories.length; j++) {
								var type = data.categories[j];
								for (var k = 0; k < type.vars.length; k++) {
									var values = type.vars[k].values;
									values[i] = parseFloat(values[i]);
									if(isNaN(values[i])){
										values[i] = '-'
									}else{
										values[i] = parseFloat(values[i]).toFixed(2)
									}
									row += "<td>";
									row += values[i];
									row += "</td>";
								}
							}
							row += "</tr>";
							historyValueTable.append(row);
						}
						setTimeout(function () {
							//计算列宽
							var tableTitleTds = $('#table-title-list>td');
							var tableValuesTds = $('#tbHistroyValue>tr').eq(0).find('td');
							var columnCounts = tableTitleTds.length;
							var widthSum = 0;
							for (var i = 0; i < columnCounts; i++) {
								var title = $(tableTitleTds[i]);
								var value = $(tableValuesTds[i]);
								var titleWidth = title.width();
								var valueWidth = value.width();
								var width = titleWidth > valueWidth ? titleWidth : valueWidth;

								width += 10;
								widthSum += width;
								title.width(width);
								value.width(width);
							}
							$("#header-table").width(widthSum);
							$("#tbHistroyValue").width(widthSum);
						}, 100);

						$('#empty-tips').hide();
						$('#table-panel').show();
						$('#echarts-container').show();
					}else {
						$('#table-panel').hide();
						$('#echarts-container').hide();
						$('#empty-tips').show();
					}
				}
			}
		});
	}

	/**
	 * 筛选条件发生变化
	 */
	function filterSelectionChanged(ret, err) {
		var result = ret.value;

		typeIds = result.typeIds;
		interval = result.interval;
		intervalDesc = result.intervalDesc;
		ddNumber = result.ddNumber;
		locName = result.locName;
		typeNames = result.typeNames;

		// Add start 2018/8/23 14:00 kangzhi
		// 存储‘选择查看类型曲线’的数据
		typeChartName = result.typeChartName;
		// Add end 2018/8/23 14:00 kangzhi

		$("#btn-location").attr("value", locName);
		$("#btn-ddnumber").attr("value", (ddNumber ? ddNumber : "-"));
		$("#btn-time").attr("value", intervalDesc);
		//开始请求历史数据
		queryData();
	}

	// Add start 2018/8/23 14:00 kangzhi
	/**
	* 初始化 echarts 表
	*/
	function initechart(data) {
		var chart = echarts.init($('#echarts-container')[0]);
		var option = {
			title: {
				text: '',
				textStyle: {
					color: '#000',
					fontSize: 20,
					fontWeight: '100'
				},
				top: '0%',
				left: 'center',
				bottom: '30%'
			},
			tooltip: {
				show: true,
				trigger: 'axis',
				axisPointer: {
					type: 'line',
					axis: 'auto',
					snap: true
				}
			},
			legend: {
				data:[],
				left: 'center',
				top: '10%'
			},
			xAxis: {
				type: 'category',
				data: []
			},
			yAxis: {
				name: '',
				type: 'value',
				min: 'dataMin',
				nameTextStyle: {
					color: '#5a5a5a',
					fontSize: 18
				},
			},
			grid: {
				left:	'3%',
				bottom: '0%',
				height: '50%',
				top: '32%',
				// Add start 2018/9/29 16:31 kangzhi
				containLabel: true
				// Add end 2018/9/29 16:31 kangzhi
			},
			series: [{
				data: [],
				type: 'line',
				smooth: true,
				itemStyle: {
					color: 'red'
				},
				lineStyle: {
					color: 'red'
				}
			}]
		};

		// 先筛选出'查看类型曲线'中选中的项
		var aimCategory = data.categories.filter(function (item) {
			return item.categotyName === typeChartName;
		});

		// 修改echarts的 option中的legend选项
		for (var i = 0; i < aimCategory[0].vars.length; i++) {
			var legendDataStr = aimCategory[0].vars[i].tagKey;
			option.legend.data.push(legendDataStr);
		}

		// 修改 echarts 的 option 中 title.fontSize 和 yAxis.nameTextStyle.fontSize
		var fontSize = parseInt($('html').css('font-size'));

		option.title.textStyle.fontSize = Math.floor(fontSize * 16 / 12);
		option.yAxis.nameTextStyle.fontSize = Math.floor(fontSize * 12 / 12);

		// 修改echarts的 option中的xAxis选项
		var myTimeList = [];
		// 格式化日期
		for (var j = 0; j < data.timeList.length; j++) {
			var date = new Date(data.timeList[j]);
			var timeStr = '';
			var month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : (date.getMonth() + 1);
			var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();
			var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours();
			var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
			var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
			timeStr = month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
			myTimeList.push(timeStr);
		}

		option.xAxis.data = myTimeList;

		// 修改echarts的 option中的yAxis选项
		if (aimCategory[0].vars[0].unit) {
			option.yAxis.name = '单位：' + aimCategory[0].vars[0].unit;
		} else {
			option.yAxis.name = '单位：无';
		}

		// 修改 echarts 的 options 中的 title 选项
		option.title.text = typeChartName;

		// 修改echarts的 option中的series选项
		var seriesData = [];

		// 将折现显示的颜色存储到一个数组中
		var colorArr = ['#ff1918', '#fab409', '#07f5fa'];

		// 循环生成series选项
		for (var k = 0; k < aimCategory[0].vars.length; k++){
			// 首先初始化一个series中元素的对象
			var seriesNum = {
				itemStyle: {
					normal: {
						color: '',
						lineStyle: {
							color: ''
						}
					}
				},
			};

			// 纵坐标数据值如果是NaN，将此处的数据显示成0
			var arr = aimCategory[0].vars[k].values.map(function (value) {
				if (value === 'NaN') {
					return 0;
				} else {
					return value;
				}
			});
			seriesNum.data = arr;
			seriesNum.type = 'line';
			seriesNum.itemStyle.normal.color = colorArr[k];
			seriesNum.itemStyle.normal.lineStyle.color = colorArr[k];
			seriesNum.smooth = true;
			seriesNum.name = aimCategory[0].vars[k].tagKey;
			seriesData.push(seriesNum);
		}

		option.series = seriesData;


		// 使用刚指定的配置项和数据显示echarts图表
		chart.setOption(option);

	}
	// Add end 2018/8/23 14:00 kangzhi

	/**
	 * 侧边栏通过主界面toast提示的事件
	 * @param {*} ret
	 * @param {*} err
	 */
	function historyDtRemoteToast(ret, err) {
		var result = ret.value;
		toast(result.msg);
		$('#table-panel').hide();
		$('#echarts-container').hide();
		$('#empty-tips').show();
	}

	apiready = function () {
		var ctrl = {
			init: {},
			bind: {}
		}
		// 适配安卓状态栏
		CommonModel.fitInStatusBar();
		var searcherTop = $('#heightHeader').height();
		$('#searcher').css('top',searcherTop);
		ctrl.init = function () {
			prId = $api.getStorage('powerRoom').prId;
			ctrl.bind();
			//设置默认开始时间和结束时间
			resetDefaultDateTime();
			updateDateTimeView();
			//初始化与边栏的通信事件机制
			//筛选条件发生变化
			api.addEventListener({ name: 'filterSelectionChanged' }, filterSelectionChanged);
			api.addEventListener({ name: 'viewappear' }, viewAppear);
			api.addEventListener({ name: 'historyDtRemoteToast' }, historyDtRemoteToast);

			//初始化表格容器的高度
			var winHeight = api.winHeight;
			var winWidth = api.winWidth;
			var headerHeight = $("#header").height();
			var searcherHeight = $("#searcher").height();
			var tableHeight = winHeight - (headerHeight + searcherHeight);

			$("#table-panel").height(tableHeight);
			$("#table-panel").css("top", (headerHeight + searcherHeight) + "px");

			//计算table-head-right的宽度和位置
			var tableHeadLeftWidth = $("#table-head-left").width() - 1;//由于四舍五入 可能多出1像素  -1 保证没有缝隙
			$("#table-head-right").width(winWidth - tableHeadLeftWidth);
			$("#table-head-right").css("left", tableHeadLeftWidth + "px");



			//算出table-body的高度和位置
			var tableHeadHeight = $("#table-head").height();
			var tableBodyHeight = tableHeight - tableHeadHeight;

			$("#table-body").height(tableBodyHeight);
			$("#table-body").css("top", (tableHeadHeight + 3) + "px"); //3像素的border
			$("#table-body-left").height(tableBodyHeight);
			$("#table-body-right").css("left", tableHeadLeftWidth + "px");
			$("#table-body-right").height(tableBodyHeight);
			$("#table-body-right").width(winWidth - tableHeadLeftWidth);

		}

		ctrl.bind = function () {
			//用户点击了返回按钮
			$(".back").on("touchend", function () {
				api.closeWin();
			});

			//用户点击了位置按钮
			$("#btn-location").on("touchend", function () {
				showRightPanel();
			});

			//用户点击了调度号按钮
			$("#btn-ddnumber").on("touchend", function () {
				showRightPanel();
			});

			//用户点击了时间间隔按钮
			$("#btn-time").on("touchend", function () {
				showRightPanel();
			});

			//用户点击了筛选按钮
			$("#btn-filter").on("touchend", function () {
				showRightPanel();
			});

			//用户点击了查询按钮
			$("#btn-quary").on("touchend", function () {
				queryData();
			});

			//用户点击了开始时间
			$("#divStartTime").on("touchend", function () {
				api.openPicker({
					type: 'date',
					date: momentFormat(startTime),
					title: '选择时间'
				}, function (ret, err) {
					if (ret) {
						startTime.date(ret.day);
						startTime.month(ret.month - 1);
						startTime.year(ret.year);
						startTime = startTime.startOf('day');
						// alert(momentFormat(startTime, "YYYY-MM-DD HH:mm:ss"));
						updateDateTimeView()
					} else {
						alert(JSON.stringify(err));
					}
				});
			});

			//用户点击了结束时间
			$("#divEndTime").on("touchend", function () {
				api.openPicker({
					type: 'date',
					date: momentFormat(endTime),
					title: '选择时间'
				}, function (ret, err) {
					if (ret) {
						endTime.date(ret.day);
						endTime.month(ret.month - 1);
						endTime.year(ret.year);
						endTime.endOf('day');
						// alert(momentFormat(endTime, "YYYY-MM-DD HH:mm:ss"));
						updateDateTimeView()
					} else {
						alert(JSON.stringify(err));
					}
				});
			});

			//监听表的滚动事件 同步各区域滚动
			$("#table-body-right").on("scroll", function () {
				var top = $(this).scrollTop();
				var left = $(this).scrollLeft();
				$("#table-body-left").scrollTop(top);
				$("#table-head-right").scrollLeft(left);
			})

			$("#table-body-left").on("scroll", function () {
				var top = $(this).scrollTop();
				$("#table-body-right").scrollTop(top);

			})

			$("#table-head-right").on("scroll", function () {
				var left = $(this).scrollLeft();
				$("#table-body-right").scrollLeft(left);

			})
		}

		ctrl.init();
	}
})()
