(function() {
	'use strict';

	app.controller('homeController', homeController);

	homeController.$inject = ['$rootScope', '$scope', '$location', '$timeout', 'Native', 'myService', 'debug'];

	function homeController($rootScope, $scope, $location, $timeout, Native, myService, debug) {		
		$scope.loading = true;
		$scope.isMove = false;
		$scope.search = ""; //搜索文本
		$scope.selectLeftMenu = 0; // 选中左侧菜单 索引
		$scope.cData = myService.getCalendarData(); // 农历信息
		// 取当前时间
		var nowTime = (new Date()).getTime();
		var oldTime = myService.Cache.get('runTime') || 0; // 上次启动时间
		$scope.isLoadData = nowTime - 60*60*1000 > oldTime; // 一小时内 初始化一次
		// 取缓存数据，先展示历史数据。
		$scope.leftMenuList = myService.Cache.get('homeController.leftMenuList'); // 分组
		$scope.itemList = myService.Cache.get('homeController.itemList'); // 菜单
		if($scope.isLoadData || !$scope.leftMenuList || !$scope.itemList){ // 有缓存就不取 DB 数据			
			// 异步加载数据，防止阻塞界面 - 性能优化
			$timeout(function(){
				console.time('加载数据');
				$scope.leftMenuList = Native.DB.getMenuList(); // 分组
				$scope.itemList = Native.DB.getItemList(); // 菜单 - webpage, param, route, name,exec, className, execNum, icon
			
				angular.forEach($scope.itemList, function(item,index){ // 运行次数，转整数
					item.execNum = parseInt(item.execNum);
				});
			
				// Native 数据存缓存 - 方便下次快速启动
				$scope.cacheLeftMenuList();
				$scope.cacheItemList();
				myService.Cache.set('runTime', nowTime);
				
				$scope.loading = false;
				debug.log('界面 初始化完毕.');
				console.timeEnd('加载数据');
			}, 100);
		}
		
		// 缓存分组
		$scope.cacheLeftMenuList = function(){
			myService.Cache.set('homeController.leftMenuList', angular.copy($scope.leftMenuList));
		};
		
		// 缓存项目
		$scope.cacheItemList = function(){
			myService.Cache.set('homeController.itemList', angular.copy($scope.itemList));
		};
		
		// 取当前选中分组名
		$scope.getSelectClassName = function(){
			if($scope.selectLeftMenu > $scope.leftMenuList.length-1){
				$scope.selectLeftMenu = 0;
			}
			return ($scope.leftMenuList[ $scope.selectLeftMenu ] || {}).className;
		};
		
		// 拖拽回调注册
		Native.Drag.registerCallback(function(json){
			var maxIconIndex = 0;
			angular.forEach($scope.itemList, function(item, index){
				if(item.icon > maxIconIndex){
					maxIconIndex = parseInt(item.icon);
				}
			});
			// icon、className
			json.icon = maxIconIndex + 1; //图标 索引
			json.className = $scope.getSelectClassName(); //分组名
			var addResult = Native.DB.addItem(json);
			if(addResult && addResult.data=="ok"){
				$scope.itemList.push(json); //添加到界面上
				$scope.$apply(); //刷新界面
			}else{
				// TODO 目前还没有 UI 组件，先用原生弹窗替代。
				debug.error('添加失败', addResult);
			}
			// 更新缓存
			//$scope.cacheLeftMenuList();
			$scope.cacheItemList();
		});
		
		// 筛选器 - 显示当前 分组的 项目
		$scope.showClassNameItem = function(item){
			if($scope.search!=""){ // 搜索模式
				if(item && item.name && item.name.toLowerCase().search( $scope.search.toLowerCase() )>=0){
					return true;
				}
			}else{ // 分组模式				
				if(item && item.className==$scope.getSelectClassName()){
					return true;
				}
			}
			return false;
		};
		
		// 清除搜索内容
		$scope.clearSearch = function(){
			$scope.search = "";
		};
		
		// 左侧菜单点击 - 切换菜单分类
		$scope.clickLeftMenu = function($index, item) {
			// console.log($index, item, $scope.leftMenuList);
			$scope.search = "";
			$scope.selectLeftMenu = $index;
			$scope.selectLeftMenuName = item;
		};
		
		// 添加分组
		$scope.addMenu = function(){
			mui.prompt("", "请输入要添加的分组名", "添加分组", ['取消', '确认'], function(obj){
				if(obj.index==1 && obj.value!="" && obj.value){ // 确定
					$scope.$apply(function(){
						// 项目跟新分组
						var maxId = 0;
						var isHas = false;
						angular.forEach($scope.leftMenuList, function(_menu, index){
							if(_menu.id > maxId){
								maxId = _menu.id;
							}
							if(_menu.className == obj.value){
								isHas = true;
							}
						});
						if(isHas){
							return mui.toast('分组已存在');
						}
						// 告知数据库 变更
						Native.DB.addMenu(maxId, obj.value);
						// 添加分组
						$scope.leftMenuList.push({
							id: maxId + 1,
							className: obj.value
						});
						// 更新缓存
						$scope.cacheLeftMenuList();
						//$scope.cacheItemList();
					});
				}
			});
		}
		
		// 分组 菜单右键
		$scope.rightClickLeftMenu = function($event, $item, $index){
			//console.log($event, $item, $index);
			var rclmList = [
				{id: 1, value: '修改'},
				{id: 2, value: '删除'},
				{id: 0, value: '-'},
				{id: 4, value: '上移'},
				{id: 5, value: '下移'},
			];
			myService.showRightClickMenu($scope, $event, rclmList, function($event, item){
				if(item.id==1){ // 修改
					mui.prompt("", $item.className, "修改分组", ['取消', '确认'], function(obj){
						if(obj.index==1 && obj.value!="" && obj.value!=$item.className){ // 确定
							$scope.$apply(function(){
								// 告知数据库 变更
								Native.DB.renameMenu($item.className, obj.value);
								// 项目跟新分组
								angular.forEach($scope.itemList, function(_item, index){
									if(_item.className == $item.className){
										_item.className = obj.value;
									}
								});
								// 更新分组
								$item.className = obj.value;
								// 更新缓存
								$scope.cacheLeftMenuList();
								$scope.cacheItemList();
							});
						}
					});
				}else if(item.id==2){ // 删除
					mui.confirm("此操作将会删除此分组下的所有项目，确定要删除吗？", "删除 ["+$item.className+"] 确认", ['取消', '删除'], function(obj){
						if(obj.index==1){ // 删除
							$scope.$apply(function(){
								// 新分组
								var newLeftMenuList = [];
								var delIconStr = [];
								angular.forEach($scope.leftMenuList, function(_item, index){
									if(_item.className != $item.className){ // 剔除删掉的分组
										this.push( _item );
									}else{
										delIconStr.push(_item.icon);
									}
								}, newLeftMenuList);
								// 告知数据库 删除操作
								Native.DB.removeMenu($item.className, delIconStr.join(','));
								
								$scope.leftMenuList = newLeftMenuList;
								$scope.selectLeftMenu = 0;
								// 新项目
								var newItemList = [];
								angular.forEach($scope.itemList, function(_item, index){
									if(_item.className != $item.className){ // 剔除删掉的分组项目
										this.push( _item );
									}
								}, newItemList);
								// console.log($scope.itemList,newItemList);
								$scope.itemList = newItemList;
								// 更新缓存
								$scope.cacheLeftMenuList();
								$scope.cacheItemList();
							});
						}
					});
				}else if(item.id==4){ // 上移
					if($index!=0){
						var newLeftMenuList = angular.copy( $scope.leftMenuList );
						var lastItem = newLeftMenuList[ $index - 1 ];
						var currentItem = newLeftMenuList[ $index ];
						// 告知数据库 更新操作
						Native.DB.modifyMenuID(currentItem.className, lastItem.id);
						Native.DB.modifyMenuID(lastItem.className, $item.id);
						
						currentItem.id = lastItem.id;
						lastItem.id = $item.id;
						newLeftMenuList[ $index ] = lastItem;
						newLeftMenuList[ $index - 1 ] = currentItem;
						$scope.leftMenuList = newLeftMenuList;
						//$scope.selectLeftMenu = $index - 1;
						// 更新缓存
						$scope.cacheLeftMenuList();
						//$scope.cacheItemList();
					}
				}else if(item.id==5){ // 下移
					if($index!=($scope.leftMenuList.length-1)){
						var newLeftMenuList = angular.copy( $scope.leftMenuList );
						var nextItem = newLeftMenuList[ $index + 1 ];
						var currentItem = newLeftMenuList[ $index ];
						// 告知数据库 更新操作
						Native.DB.modifyMenuID(currentItem.className, nextItem.id);
						Native.DB.modifyMenuID(nextItem.className, $item.id);
						
						currentItem.id = nextItem.id;
						nextItem.id = $item.id;
						newLeftMenuList[ $index ] = nextItem;
						newLeftMenuList[ $index + 1 ] = currentItem;
						$scope.leftMenuList = newLeftMenuList;
						//$scope.selectLeftMenu = $index + 1;
						// 更新缓存
						$scope.cacheLeftMenuList();
						//$scope.cacheItemList();
					}
				}
			});
		};
		// 项目 菜单右键
		$scope.rightClickItem = function($event, $item){
			// console.log($item);
			var lmlList = [];
			angular.forEach($scope.leftMenuList, function(item, index){
				lmlList.push({
					id: item.id,
					value: item.className
				})
			});
			var rclmList = [
				{id: 1, value: '定位文件'},
				{id: 2, value: '移动到分组', children: lmlList},
				{id: 0, value: '-'},
				{id: 4, value: '修改项目'},
				{id: 5, value: '删除项目'},
			];
			myService.showRightClickMenu($scope, $event, rclmList, function($event, item, children){
				if(item.id==1){ // 定位文件
					Native.Runtime.findFile( $item.name );
				}else if(item.id==2){ // 移动到
					if(children){
						// 告知数据库 更新操作
						Native.DB.modifyItemMenu($item.name, children.value);
						// 修改分组
						$item.className = children.value;
						
						// 更新缓存
						//$scope.cacheLeftMenuList();
						$scope.cacheItemList();
					}
				}else if(item.id==4){ // 修改项目
					//console.log($item);
					$scope.$editItem = {
						show: true,
						edit: angular.copy($item),
						sure: function(edit){
							var isHas = false;
							if(edit.name != $item.name){ // 名字改动检测重名
								angular.forEach($scope.itemList, function(item, index){
									if(item.name == edit.name){
										isHas = true;
									}
								});
							}
							if(isHas){
								mui.toast('项目名称已存在，请重新命名。');
							}else{
								// 告知数据库 删除操作
								Native.DB.modifyItem($item.name, edit);
								// 界面更新数据
								angular.forEach(edit, function(value, key){
									$item[ key ] = value;
								});
								$scope.$editItem = null;
								// 更新缓存
								//$scope.cacheLeftMenuList();
								$scope.cacheItemList();
							}
						}
					}
				}else if(item.id==5){ // 删除项目
					mui.confirm("确定要删除吗？", null, null, function(obj){
						if(obj.index==1){
							$scope.$apply(function(){
								// 告知数据库 删除操作
								Native.DB.removeItem($item.name, $item.icon);
								// 新项目组
								var newItemList = [];
								angular.forEach($scope.itemList, function(item, index){
									if(item.name != $item.name){
										this.push(item);
									}
								}, newItemList);
								$scope.itemList = newItemList;
								// 更新缓存
								//$scope.cacheLeftMenuList();
								$scope.cacheItemList();
							});
						}
					});
				}
			});
		};
		
		// 项目双击 - 运行
		$scope.dblclickItem = function($event, item){
			// 原生执行
			Native.Runtime.runItem(item);
			// 运行数 +1
			item.execNum = parseInt(item.execNum) + 1;			
			// 更新缓存
			//$scope.cacheLeftMenuList();
			$scope.cacheItemList();
		};
		
		// 移动窗口
		$scope.moveWindow = function($event){
			if($scope.isMove){				
				// console.log({movementX: $event.movementX, movementY: $event.movementY});
				Native.Window.move($event.movementX, $event.movementY);
			}
		};
		
		// 最小化 Winodw
		$scope.minWindow = function() {
			Native.Window.min();
		};
		
		// 关闭 Window
		$scope.closeWindow = function() {
			// Native.Window.close(); // 为了节约启动时间和体验，不关闭窗口，改为隐藏
			Native.Window.hide();
		};
	};
})();
