/// <reference path="../../includes.ts"/>
/// <reference path="systemPlugin.ts"/>
/// <reference path="systemHelpers.ts"/>
/// <reference path="systemServices.ts"/>
/// <reference path="../../configs/ts/configsUtils.ts"/>
/// <reference path="../../configs/ts/customAlert.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>

module System{
	export var SystemSQLManagement = controller('SystemSQLManagement', ['$scope', '$location', '$http', '$element', '$templateCache', 'NgTableParams', 'ngDialog', 'SystemModel', ($scope, $location, $http, $element, $templateCache, NgTableParams, ngDialog, SystemModel) => {
		shareInit($scope);
		$scope.cities =  classifyCity(SystemModel.regionalismInfo);

		$scope.status = [{id: 0, label: "有缺失"}, {id: 1, label: "正常"}, {id: 2, label:"待归档"}, {id: 3, label: "待审核"}];	

    SystemModel.updateSqlInfo();	

    $scope.model = SystemModel.sqlInfo; 

    $scope.checkboxes = {
      checked: false,
      items: {}
    };

    $scope.optionsFilter= {
      x: "all",
      y: "all",
      z: "all"
    }

		$scope.tableParams = new NgTableParams({count: 25}, {
	    counts: [25, 50, 100],
      dataset: $scope.model
   	});

    $scope.citySelect = (x) => {
      $scope.optionsFilter.x = x;
      $scope.optionsFilter.y = $scope.y = "all";
      if(x != "all"){
        $scope.countries = classifyCountry(SystemModel.regionalismInfo, x);  //获取当前市下所有区县 
      }else{        
        $scope.countries = [];             
      }      
    } 

    $scope.countrySelect = (y) => {
      $scope.optionsFilter.y = y;
    }

    $scope.statusSelect = (z) => {
      $scope.optionsFilter.z = z; 
    }

    $scope.$watch(() =>{
      return $scope.optionsFilter;
    }, (value) =>{       
      shareUpdate($scope.model, value);
    }, true);

    $scope.quickCheck = () => {
      updateSqlStatus("/java/console/api/filePackage/totalVerifySqlFile");     
    }

    $scope.quickFile = () => {
      updateSqlStatus("/java/console/api/filePackage/totalOnholeSqlFile");
    }

    $scope.help = () => {
      ngDialog.open({
        template: 'statusHelp.html',        
        width: 600, 
        height: 370,         
        closeByDocument: false, 
        className: 'ngdialog-theme-default'
      });  
    }

     	// watch for check all checkbox
 		$scope.$watch(function() {
    		return $scope.checkboxes.checked;
  	}, function(value) {
    		angular.forEach($scope.model, function(item) {
      		$scope.checkboxes.items[item.id] = value;
    		});
  	});
    
  	// watch for data checkboxes
  	$scope.$watch(function() {
    		return $scope.checkboxes.items;
 		}, function(values) {  
      $scope.checkable = false;
      for(var index in values){
        if(values[index] == true){
          $scope.checkable = true;
          break;
        }
      } 
      var checked = 0, unchecked = 0,
      total = $scope.model.length;
      angular.forEach($scope.model, function(item) {
        checked += ($scope.checkboxes.items[item.id]) || 0;
        unchecked += Number((!$scope.checkboxes.items[item.id])) || 0;
      });
    	if ((unchecked == 0) || (checked == 0)) {
      	$scope.checkboxes.checked = (checked == total);
    	}    	
    	angular.element($element[0].getElementsByClassName("select-all")).prop("indeterminate", (checked != 0 && unchecked != 0));
  	}, true); 

    	//查看
  	$scope.viewSql = (selected, type) => {    		
  		ngDialog.open({ 
    		template: 'sqlView.html',
    		controller:'Configs.SqlViewController',
    		width: 1000,
    		height: 600,
    		scope: $scope, 
    		closeByDocument : false,
    		data: {type: type, item: selected },	
    		className: 'ngdialog-theme-default'
    	});	 
  	}

    	//上传
  	$scope.addSql = (selected, type) => {    		
  		ngDialog.open({ 
    		template: 'sqlAdd.html',
    		controller:'Configs.SqlAddController',
    		width: 600,
    		height: 600,
    		scope: $scope, 
    		closeByDocument : false,
    		data: {type: type, item: selected },	
    		className: 'ngdialog-theme-default'
    	});	
  	} 

    //审核
  	$scope.verifySql = (selected, type) => {
  		ngDialog.open({ 
    		template: 'sqlVerification.html',
    		controller:'Configs.sqlVerificationController',
    		width: 1000,
    		height: 600,
    		scope: $scope, 
    		closeByDocument : false,
    		data: {type: type, item: selected },	
    		className: 'ngdialog-theme-default'
    	});
  	}

    //替换
  	$scope.moveSql = (selected, type) => {
   		ngDialog.open({ 
    		template: 'sqlMove.html',
    		controller:'Configs.sqlMoveController',
    		width: 600,
    		height: 600,
    		scope: $scope, 
    		closeByDocument : false,
    		data: {type: type, item: selected },	
    		className: 'ngdialog-theme-default'
    	});   		
  	}

  	$scope.$on('onOk', (event, data) => {
  		Configs.create_mask();  //创建遮罩层
		  Kubernetes.create_locadEffect("正在更新文件,请稍等!"); //创建数据加载效果层
      var target = document.getElementById('loading')
      var spinner = new Spinner(Kubernetes.loadConfigs()).spin(target);    
  		$http({
			  url: "/java/console/api/filePackage/handleSqlFile",
			  method: "POST",
			  params: {type: data.type, opt: data.opt},				
			  data: JSON.stringify({
				  item: data.item, 
				  content: data.content
			  })
		  }).success((data,header,config,status) => {
		 	  $("#load").remove();
        Kubernetes.removeMask(); 
        $scope.model = SystemModel.sqlInfo = data.data;   
        shareUpdate($scope.model, $scope.optionsFilter);
		  }).error((data,header,config,status) => {	
        $("#load").remove();
        Kubernetes.removeMask();				
		  });
  	});

  	$scope.$on("replace", (event, data) => {
  		$http({
			  url: "/java/console/api/filePackage/handleSqlFile",
			  method: "POST",
			  params: {type: data.type, opt: data.opt},				
			  data: JSON.stringify({
				  item: data.item, 
				  content: data.content
			  })
		  }).success((data,header,config,status) => {
        $scope.model = SystemModel.sqlInfo = data.data;
			  shareUpdate($scope.model, $scope.optionsFilter);
		  }).error((data,header,config,status) => {
			  Configs.customAlert("提示", "脚本替换或归档失败!", '',null, 0, "error");
		  });    		
  	}); 

  	function shareUpdate (data, value){                
      var filter = data, result = [];            
      if(value.x != "all"){
        angular.forEach(filter, (item) => {
          if(item.cityName == value.x)
              result.push(item);
        });
        filter = result;
        result = [];
      }          

      if(value.y != "all"){
        angular.forEach(filter, (item) => {
          if(item.districtName == value.y)
            result.push(item);
          });
        filter = result;
        result = [];
      }

      if(value.z != "all"){
        angular.forEach(filter, (item) =>{
          if($scope.status[item.sysStatus].label == value.z)
            result.push(item);
          });
        filter = result;
        result = [];
      }
      
      $scope.tableParams.settings({
        dataset: filter
      }); 

      $scope.checkboxes = {
        checked: false,
        items: {}
      };       
  	} 

    function updateSqlStatus(url: string) {
      var items = [];
      if($scope.model && $scope.model.length > 0){
        angular.forEach($scope.model, (item) => {
          if($scope.checkboxes.items[item.id])
            items.push(item);
        });
      }
      if(items.length <= 0)
        return;
      Configs.create_mask();  //创建遮罩层
      Kubernetes.create_locadEffect("正在更新文件,请稍等!"); //创建数据加载效果层

      $http({
        url: url,
        method: 'POST',            
        data: JSON.stringify(items)
      }).success(function(data,header,config,status){
        $scope.model = SystemModel.sqlInfo = data.data;   
        shareUpdate($scope.model, $scope.optionsFilter);       
        $("#load").remove();
        Kubernetes.removeMask();    
        //响应成功
      }).error(function(data,header,config,status){
        //处理响应失败 
        $("#load").remove();
        Kubernetes.removeMask(); 
        Configs.customAlert("提示", "一键审核或归档失败!", '',null, 0, "error");        
      });     
    }     
	}])
}