/* Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
'use strict';

angular.module('flowableModeler')
  .controller('FormsCtrl', ['$rootScope', '$scope', '$translate', '$http', '$timeout','$location', '$modal', function ($rootScope, $scope, $translate, $http, $timeout, $location, $modal) {

      // Main page (needed for visual indicator of current page)
      $rootScope.setMainPageById('forms');
      $rootScope.formItems = undefined;

      // get latest thumbnails
      $scope.imageVersion = Date.now();

	  $scope.model = {
        filters: [
            {id: 'forms', labelKey: 'FORMS'}
		],

		sorts: [
		        {id: 'modifiedDesc', labelKey: 'MODIFIED-DESC'},
		        {id: 'modifiedAsc', labelKey: 'MODIFIED-ASC'},
		        {id: 'nameAsc', labelKey: 'NAME-ASC'},
		        {id: 'nameDesc', labelKey: 'NAME-DESC'}
		]
	  };

	  if ($rootScope.formFilter) {
		  $scope.model.activeFilter = $rootScope.formFilter.filter;
		  $scope.model.activeSort = $rootScope.formFilter.sort;
		  $scope.model.filterText = $rootScope.formFilter.filterText;

	  } else {
		  // By default, show first filter and use first sort
	      $scope.model.activeFilter = $scope.model.filters[0];
	      $scope.model.activeSort = $scope.model.sorts[0];
	      $rootScope.formFilter = {
	        filter: $scope.model.activeFilter,
	        sort: $scope.model.activeSort,
	        filterText: ''
	      };
	  }

	  $scope.activateFilter = function(filter) {
		  $scope.model.activeFilter = filter;
		  $rootScope.formFilter.filter = filter;
		  $scope.loadForms();
	  };

	  $scope.activateSort = function(sort) {
		  $scope.model.activeSort = sort;
		  $rootScope.formFilter.sort = sort;
		  $scope.loadForms();
	  };

	  $scope.loadForms = function() {
		  $scope.model.loading = true;

		  var params = {
		      filter: $scope.model.activeFilter.id,
		      sort: $scope.model.activeSort.id,
		      modelType: 2
		  };

		  if ($scope.model.filterText && $scope.model.filterText != '') {
		    params.filterText = $scope.model.filterText;
		  }

		  $http({method: 'GET', url: FLOWABLE.APP_URL.getModelsUrl(), params: params}).
		  	success(function(data, status, headers, config) {
	    		$scope.model.forms = data;
	    		$scope.model.loading = false;
	        }).
	        error(function(data, status, headers, config) {
	           $scope.model.loading = false;
	        });
	  };

	  var timeoutFilter = function() {
	    $scope.model.isFilterDelayed = true;
	    $timeout(function() {
	        $scope.model.isFilterDelayed = false;
	        if($scope.model.isFilterUpdated) {
	          $scope.model.isFilterUpdated = false;
	          timeoutFilter();
	        } else {
	          $scope.model.filterText = $scope.model.pendingFilterText;
	          $rootScope.formFilter.filterText = $scope.model.filterText;
	          $scope.loadForms();
	        }
	    }, 500);
	  };

	  $scope.filterDelayed = function() {
	    if($scope.model.isFilterDelayed) {
	      $scope.model.isFilterUpdated = true;
	    } else {
	      timeoutFilter();
	    }
	  };

	  $scope.createForm = function() {
	      $rootScope.currentKickstartModel = undefined;
		  $scope.createFormCallback = function(result) {
		      $rootScope.editorHistory = [];
			  $location.path("/form-editor/" + result.id);
		  };
          _internalCreateModal({
			  template: 'views/popup/form-create.html?version=' + Date.now(),
			  scope: $scope
		  }, $modal, $scope);
	  };

	  $scope.showFormDetails = function(form) {
	      if (form) {
	          $rootScope.editorHistory = [];
	          $location.path("/forms/" + form.id);
	      }
	  };

	  $scope.editFormDetails = function(form) {
		  if (form) {
		      $rootScope.editorHistory = [];
			  $location.path("/form-editor/" + form.id);
		  }
	  };

	  // Finally, load initial forms
	  $scope.loadForms();
  }]);


angular.module('flowableModeler')
.controller('CreateNewFormCtrl', ['$rootScope', '$scope', '$http',
    function ($rootScope, $scope, $http) {

    $scope.model = {
       loading: false,
       form: {
            name: '',
            key: '',
            description: '',
            modelType: 2
       }
    };

    $scope.ok = function () {

        if (!$scope.model.form.name || $scope.model.form.name.length == 0 ||
        	!$scope.model.form.key || $scope.model.form.key.length == 0) {
        	
            return;
        }

        $scope.model.loading = true;

        $http({method: 'POST', url: FLOWABLE.APP_URL.getModelsUrl(), data: $scope.model.form}).
            success(function(data, status, headers, config) {
                $scope.$hide();
                $scope.model.loading = false;

                if ($scope.createFormCallback) {
                	$scope.createFormCallback(data);
                	$scope.createFormCallback = undefined;
                }

            }).
            error(function(data, status, headers, config) {
                $scope.model.loading = false;
                $scope.model.errorMessage = data.message;
            });
    };

    $scope.cancel = function () {
        if(!$scope.model.loading) {
            $scope.$hide();
        }
    };
}]);

angular.module('flowableModeler')
	.controller('DuplicateFormCtrl', ['$rootScope', '$scope', '$http',
		function ($rootScope, $scope, $http) {

			$scope.model = {
				loading: false,
				form: {
					id: '',
					name: '',
					key: '',
					description: '',
					modelType: 2
				}
			};

			if ($scope.originalModel) {
				//clone the model
				$scope.model.form.name = $scope.originalModel.form.name;
				$scope.model.form.key = $scope.originalModel.form.key;
				$scope.model.form.description = $scope.originalModel.form.description;
				$scope.model.form.modelType = $scope.originalModel.form.modelType;
				$scope.model.form.id = $scope.originalModel.form.id;
			}

			$scope.ok = function () {

				if (!$scope.model.form.name || $scope.model.form.name.length == 0 ||
					!$scope.model.form.key || $scope.model.form.key.length == 0) {
					
					return;
				}

				$scope.model.loading = true;

				$http({method: 'POST', url: FLOWABLE.APP_URL.getCloneModelsUrl($scope.model.form.id), data: $scope.model.form}).
					success(function(data, status, headers, config) {
						$scope.$hide();
						$scope.model.loading = false;

						if ($scope.duplicateFormCallback) {
							$scope.duplicateFormCallback(data);
							$scope.duplicateFormCallback = undefined;
						}

					}).
					error(function(data, status, headers, config) {
						$scope.model.loading = false;
						 $scope.model.errorMessage = data.message;
					});
			};

			$scope.cancel = function () {
				if(!$scope.model.loading) {
					$scope.$hide();
				}
			};
		}]);