angular.module('APP_MBO').controller('CareerVision', function($scope, MBOrest, MBOutil, APSRest, $state, $stateParams, $q, $filter) {

	$scope.employeeid = $stateParams.employeeid;
	$scope.apsyear = $stateParams.apsyear;
	$scope.state = 0;
	$scope.user_data = {};
	$scope.CareerGoals = {};
	$scope.CareerLanguage = [];
	$scope.CareerCk = [];
	$scope.CareerCkMaxLength = 3;
	$scope.CareerExpertiseArea = [];
	$scope.CareerExpertiseAreaMaxLength = 5;
	$scope.CareerOther = [];
	$scope.CareerOtherMaxLength = 3;
	$scope.CareerApsComment = {};
	$scope.userdata = {};
	$scope.aprraisee_data = {};
	$scope.isAppraisee = '';
	$scope.isAppraiser = '';
	$scope.approverLevel = '';
	$scope.dateNow = new Date().toISOString().slice(0,10);
	$scope.TapsstateList = MBOutil.TapsstateList;
	$scope.alertSaveComplete = MBOutil.alertSaveComplete;
	$scope.loading = MBOutil.loading;

	if( MBOutil.TapsstateList.length == 0 ){
		MBOrest.TapsstateList.query({ apsid: 'MBO' })
			.$promise.then(function(data) {
				MBOutil.TapsstateList = data.TapsstateList;
				$scope.TapsstateList = MBOutil.TapsstateList;
			});
	}

	APSRest.ApsState.query( { apsid: 'MBO', employeeid: $scope.employeeid, apsyear: $scope.apsyear } )
		.$promise.then(function(data) {
			$scope.state = data.apsstate;
		});

	MBOrest.Profile.query({ apsyear: $scope.apsyear, employeeid: $scope.employeeid })
		.$promise.then(function(data) {
			$scope.aprraisee_data = data.aprraisee_data;
			$scope.userdata = data.userdata;
			$scope.isAppraisee = data.isAppraisee;
			$scope.isAppraiser = data.isAppraiser;
			$scope.approverLevel = data.approverLevel;
		});

	MBOrest.CareerVision.CareerGoals.query( { apsyear: $scope.apsyear, employeeid: $scope.employeeid } )
		.$promise.then(function(data) {
			$scope.CareerGoals = data.CareerGoals;
		});

	MBOrest.CareerVision.CareerLanguage.query( { apsyear: $scope.apsyear, employeeid: $scope.employeeid } )
		.$promise.then(function(data) {
			$scope.CareerLanguage = data.CareerLanguage;
		});


	MBOrest.CareerVision.CareerCk.query( { apsyear: $scope.apsyear, employeeid: $scope.employeeid } )
		.$promise.then(function(data) {
			$scope.CareerCk = data.CareerCk;
		});

	MBOrest.CareerVision.CareerExpertiseArea.query( { apsyear: $scope.apsyear, employeeid: $scope.employeeid } )
		.$promise.then(function(data) {
			$scope.CareerExpertiseArea = data.CareerExpertiseArea;
		});

	MBOrest.CareerVision.CareerOther.query( { apsyear: $scope.apsyear, employeeid: $scope.employeeid } )
		.$promise.then(function(data) {
			$scope.CareerOther = data.CareerOther;
		});

	MBOrest.CareerVision.CareerApsComment.query( { apsyear: $scope.apsyear, employeeid: $scope.employeeid } )
		.$promise.then(function(data) {
			$scope.CareerApsComment = data.CareerApsComment;
		});

	$scope.$on('$stateChangeStart', function(event) {
		if($scope.myForm.$dirty){
			var answer = confirm("Data has not been save. Are you sure to leave this tab?")
			if(!answer) {
				event.preventDefault();
			}
		}
	});

	$scope.save = function(isAlert){
		/*$scope.loading();*/
		/*for(let i=0;i<100;i++){ 
			MBOrest.CareerVision.CareerGoals.save( { apsyear: $scope.apsyear, employeeid: $scope.employeeid }, $scope.CareerGoals )
			.$promise.then(function(data) {
				//console.log(i);
			});
		}*/

		let saveCareerGoals = $q.defer();
		let saveCareerLanguage = $q.defer();
		let saveCareerCk = $q.defer();
		let saveCareerExpertiseArea = $q.defer();
		let saveCareerOther = $q.defer();
		let saveCareerApsComment = $q.defer();

		$q.all(
			[
				saveCareerGoals.promise,
				saveCareerLanguage.promise,
				saveCareerCk.promise,
				saveCareerExpertiseArea.promise,
				saveCareerOther.promise,
				saveCareerApsComment.promise
			]
		).then(function() {
			if(isAlert != false){
				/*$scope.alertSaveComplete();*/
			}
			alert("Save Complete");
			if($scope.myForm != undefined){
				$scope.myForm.$setPristine();
			}
			return true;
		});

		MBOrest.CareerVision.CareerGoals.save( { apsyear: $scope.apsyear, employeeid: $scope.employeeid }, $scope.CareerGoals )
			.$promise.then(function(data) {
				saveCareerGoals.resolve(data);
			});

		MBOrest.CareerVision.CareerLanguage.save( { apsyear: $scope.apsyear, employeeid: $scope.employeeid }, $scope.CareerLanguage )
			.$promise.then(function(data) {
				saveCareerLanguage.resolve(data);
			});

		MBOrest.CareerVision.CareerCk.save( { apsyear: $scope.apsyear, employeeid: $scope.employeeid }, $scope.CareerCk )
			.$promise.then(function(data) {
				saveCareerCk.resolve(data);
			});

		MBOrest.CareerVision.CareerExpertiseArea.save( { apsyear: $scope.apsyear, employeeid: $scope.employeeid }, $scope.CareerExpertiseArea )
			.$promise.then(function(data) {
				saveCareerExpertiseArea.resolve(data);
			});

		MBOrest.CareerVision.CareerOther.save( { apsyear: $scope.apsyear, employeeid: $scope.employeeid }, $scope.CareerOther )
			.$promise.then(function(data) {
				saveCareerOther.resolve(data);
			});

		MBOrest.CareerVision.CareerApsComment.save( { apsyear: $scope.apsyear, employeeid: $scope.employeeid }, $scope.CareerApsComment )
			.$promise.then(function(data) {
				saveCareerApsComment.resolve(data);
			});
	};

	$scope.delRow = function(obj){
		MBOutil.deleteCheckedlist(obj);
	};

	$scope.getIdx = function(obj){
		let sort = $filter('orderBy')(obj, 'idx');
		if(sort == ''){
			return 1;
		}
		return parseInt(sort[ sort.length-1 ].idx)+1;
	}

	$scope.addRowCK = function(){
		if($scope.CareerCk.length < $scope.CareerCkMaxLength){
			$scope.CareerCk.push(
										{ 
											'idx': $scope.getIdx($scope.CareerCk),
											'dev_oppo': '',
											'cklc': '',
											'action': '',
											'timeframe': '',
											'isChecked': false,
											'isDelete': false,
											'isNew': true
										}
									);
		}
	};

	$scope.addRowExpertise = function(){
		if($scope.CareerExpertiseArea.length < $scope.CareerExpertiseAreaMaxLength){
			$scope.CareerExpertiseArea.push(
										{ 
											'idx': $scope.getIdx($scope.CareerExpertiseArea),
											'dev_oppo': '',
											'expertise_area': '',
											'action': '',
											'timeframe': '',
											'isChecked': false,
											'isDelete': false,
											'isNew': true
										}
									);
		}
	};

	$scope.addRowOther = function(){
		if($scope.CareerOther.length < $scope.CareerOtherMaxLength){
			$scope.CareerOther.push(
										{ 
											'idx': $scope.getIdx($scope.CareerOther),
											'training_needs': '',
											'timeframe': '',
											'isChecked': false,
											'isDelete': false,
											'isNew': true
										}
									);
		}
	};
	
	$scope.addRowLanguage = function(){
			$scope.CareerLanguage.push(
												{ 
													'idx': $scope.getIdx($scope.CareerLanguage),
													'language': '',
													'level': '',
													'score': '',
													'isChecked': false,
													'isDelete': false,
													'isNew': true
												}
											);
	};

	$scope.Next = function(){
		if( confirm("Are you sure to confirm data?") == true ){
			/*$scope.loading();*/
			let isAlert = false;
			let Q1 = $q.defer();
			let Q2 = $q.defer();

			$q.all(
				[ Q1.promise, Q2.promise ]
			).then(function() {
				$scope.myForm.$setPristine();
				$state.reload();
			});

			Q1.resolve( $scope.save(isAlert) );

			MBOrest.CareerVision.CareerGoals.transfer( { apsyear: $scope.apsyear, employeeid: $scope.employeeid } )
				.$promise.then(function(data) {
					/*$scope.alertSaveComplete(data.Message);*/
					Q2.resolve(data);
				});
		}
    };

});