/// <reference path="../../includes.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesHelpers.ts"/>
/// <reference path="../../kubernetes/ts/kubernetesModel.ts"/>
/// <reference path="../../configs/ts/configsDataService.ts"/>
/// <reference path="developerEnrichers.ts"/>
/// <reference path="developerHelpers.ts"/>
/// <reference path="dataManagerHelper.ts"/>
/// <reference path="dataManagerModel.ts"/>
/// <reference path="../../configs/ts/configsHelper.ts"/>

module Developer {
  export var WorkspacesController = controller("WorkspacesController", ["$scope", "KubernetesModel", "DataModel", "ConfigsModel", "KubernetesState", "$templateCache", "$location", "$routeParams", "$http", "$timeout", "KubernetesApiURL", "$element",
  ($scope, KubernetesModel: Kubernetes.KubernetesModelService, DataModel:Developer.DataModelService, ConfigsModel:Configs.ConfigsModelService, KubernetesState,  $templateCache:ng.ITemplateCacheService, $location:ng.ILocationService, $routeParams, $http, $timeout, KubernetesApiURL, $element) => {    
    $scope.model=DataModel; 
    init($scope, $location, $routeParams);   
    $scope.options = DataModel.paramOptions;
    $scope.pageSizeChoses = DataModel.paramOptions.pagerSizeOption;
    $scope.options.dataType = getDataType($location);    

    $scope.treeOptions = {
      nodeChildren: "childNodes",
      dirSelectable: true,
      injectClasses: {
        ul: "a1",
        li: "a2",
        liSelected: "a7",
        iExpanded: "a3",
        iCollapsed: "a4",
        iLeaf: "a5",
        label: "a6",
        labelSelected: "a8"
      }
    }

    //配置数据表格需要显示的内容及显示格式
    $scope.tableConfig = {
      data: 'model.data',     
      showSelectionCheckbox: true,
      enableRowClickSelection: false,
      multiSelect: true,     
      selectedItems: [],     
      filterOptions: {
        filterText: $location.search()["q"] || ''
      },
      columnDefs: [
        {
          field: "_key",
          displayName: '编码',
          customSortField: (field) =>{
            return field.id;           
          }         
        },
        {
          field: "name",
          displayName: '市-区/县'       
        },
        { 
          field: "systemName",
          displayName: '系统名称'         
        },
        {
          field: "labels",
          displayName: '数据标签',
          cellTemplate: $templateCache.get("dataLabelsTemplate.html")      
        },     
        {
          field: "collectingTime",
          displayName: '采集时间'        
        },
        {
          field: "collectorName",
          displayName: '汇总状态'       
        }         
      ]
    };

    $scope.selectBatchItem = (item)=> {      
      $scope.navbarItems.forEach((nav) =>{
        nav.class="";
      });
      item.class="active";
      if(item.label === "全部") 
         $scope.model.updateParamOption("dataBatch", null);
      else
         $scope.model.updateParamOption("dataBatch", item.alias);        
    }

    $scope.isEmptyOrFirst = () => {
      var idx = $scope.model.getParamOption("currentPageNum");
      var length =$scope.options.getPageSizeNum();      
      return length <= 0 || idx <= 1;
    }

    $scope.isEmptyOrLast = () =>{
      var idx = $scope.model.getParamOption("currentPageNum");
      var length =$scope.options.getPageSizeNum();
      return length < 1 || idx >= length;
    }

    $scope.first = () => {      
      var idx = $scope.model.getParamOption("currentPageNum");      
      if(idx >1)
        $scope.model.updateParamOption("currentPageNum", 1);
    }

    $scope.last = () =>{      
      var idx = $scope.model.getParamOption("currentPageNum"); 
      var length =$scope.options.getPageSizeNum();
      if(idx < length)
         $scope.model.updateParamOption("currentPageNum", length);
    }

    $scope.previous = () => {      
      var idx = $scope.model.getParamOption("currentPageNum"); 
      var length =$scope.options.getPageSizeNum();
      if(idx > 1)
        $scope.model.updateParamOption("currentPageNum", idx-1);
    }

    $scope.next = () =>{
      var length =$scope.options.getPageSizeNum();
      var idx = $scope.model.getParamOption("currentPageNum");
      if(idx < length)
        $scope.model.updateParamOption("currentPageNum", idx+1);      
    }

    $scope.$watch('options', (newValue, oldValue) => {             
      if(newValue && newValue !== oldValue){
        if(newValue.currentTableSize !== oldValue.currentTableSize)
          $scope.options.priorTableSize = oldValue.currentTableSize;        
        else 
          $scope.options.priorTableSize = newValue.currentTableSize;

        DataModel.updateModel();
      }
            
    }, true);  

    $scope.deletePrompt = (items) =>{
      var idColl = [];
      angular.forEach(items,(item) => {
        idColl.push(item.id);
        console.log(item.id);
      });
      $http({  
       method: "POST",  
       url: "/java/console/api/delete/data",         
       params: {"data": idColl}   
      }).success(function(data, status, headers, config) {  
        //成功之后做一些事情 
        DataModel.updateModel();      
      }).error(function(data, status, headers, config) {  
        
      });  
    }

    $scope.migrationClick = {
      items:null,
      selectedItem: {"name": "当前没有可以迁移的集群"},
      dialog: new UI.Dialog(),
      onOk: () => {        
        var migrationClick = $scope.migrationClick;
        Configs.oracleInfoOperate($http, "/java/console/api/volume", Configs.OperateType.MOVE, 
          {
            "name": migrationClick.selectedItem.name,
            "selectItems": $scope.tableConfig.selectedItems,
            "selectNode": $scope.selectNode
          }, (result, status) => {
          if(status===200){
              //$scope.model.updateOracleParam();
          }else{
              throw "资源请求失败";                    
          }
        });
        migrationClick.close();
      },
      open: (selected) =>{
        var migrationClick = $scope.migrationClick;
        if($scope.volumes && $scope.volumes instanceof Array && $scope.volumes.length >0)
           migrationClick.selectedItem = $scope.volumes[0];
         console.log(migrationClick.selectedItem.folder.childNodes);

        migrationClick.dialog.open();  
      },
      close: () => {
        $scope.migrationClick.selectedItem = {"name": "当前没有可以迁移的集群"};
        $scope.migrationClick.dialog.close();
      }
    };

    $scope.createOracleService = (items) =>{     
      angular.forEach(items,(item)=>{       
        Kubernetes.createRC({
          name: item._key,
          labels: {
            system: item.systemCode.toString(),
            version: item.dataVersion.toString(),
            region: item.regionalismCode.toString()
          },
          annotations: {
            cityName: item.cityName,
            districtName: item.districtName,
            systemName: item.systemName
          },
          path: item.dataPath+"app/",
          isTarget: "false"
        }, (rc) =>{        
          Kubernetes.connectOracle($http, $timeout, "/java/console/api/connectOracle", "create", Kubernetes.getName(rc), 0);        
        });              
      });
      $timeout(() => {
         $location.path('/kubernetes/namespace/default/replicationControllers');            
      }, 200);
    }

    function init($scope,$location,$routeParams){
      $scope.model.updateModel();
      if(ConfigsModel.cluster!=null)
        $scope.volumes = ConfigsModel.cluster;  

      //创建二级菜单      
      $scope.subTabConfig = Developer.createCurrentSubNavBar($scope, $location, $routeParams);
      $scope.navbarItems =[{       
        herf: "",
        label: "全部",
        title: "查看全部数据",
        class: "active",
        alias: null
      },
      {
        herf: "",
        label: "批次A",
        title: "查看批次A的数据",
        class: "",
        alias: "A"
      },
      {
        herf: "",
        label: "批次B",
        title: "查看批次B的数据",
        class: "",
        alias: "B"
      }]
    }

    function getDataType($location){
      var path = $location.path();
      var result;
      var subPath = path.split("/");
      switch (subPath[subPath.length -1]) {
        case "financial":
          result = "财政"
          break;
        case "social-security":
          result = "社保"
          break;          
        default:
          result = null;
          break;
      }     
      return result;
    }
  }]);
}
