'use strict';

angular.module('forms').directive('submitFormDirective', ['$http', 'TimeCounter', '$filter', '$rootScope', 'Auth',
    function ($http, TimeCounter, $filter, $rootScope, Auth) {
        return {
            templateUrl: 'modules/forms/views/directiveViews/form/submit-form.client.view.html',    
            restrict: 'E',
            scope: {
                myform:'='
            },
            controller: function($document, $scope){
                $scope.authentication = $rootScope.authentication;

                $scope.reloadForm = function(){
                    //Reset Form
                    $scope.myform.submitted = false;
                    $scope.myform.form_fields = _.chain($scope.myform.form_fields).map(function(field){
                            field.fieldValue = '';
                            return field;
                        }).value();

					$scope.loading = false;
                    $scope.error = '';
                    $scope.selected = {
                        _id: $scope.myform.form_fields[0]._id,
                        index: 0,
                    };

                    //Reset Timer
                    TimeCounter.restartClock(); 
                };
	
                /*
                ** Field Controls
                */
                $scope.setActiveField = $rootScope.setActiveField = function(field_id, field_index) {
                    if($scope.selected === null){
						return;
		    		}
                    console.log('field_id: '+field_id);
                    console.log('field_index: '+field_index);
                    console.log($scope.selected);

                    $scope.selected._id = field_id;
                    $scope.selected.index = field_index;
                    setTimeout(function() {
                        $('html, body').animate({
                            scrollTop: $('.activeField').offset().top
                        },200);
                    }, 10);
                };

                $rootScope.nextField = $scope.nextField = function(){
                    console.log($scope.selected.index)
					console.log($scope.myform.form_fields.length-1);
		   			
					if($scope.selected.index < $scope.myform.form_fields.length-1){
                        $scope.selected.index++;
                        $scope.selected._id = $scope.myform.form_fields[$scope.selected.index]._id;
                        $rootScope.setActiveField($scope.selected._id, $scope.selected.index);
                    } else if($scope.selected.index === $scope.myform.form_fields.length-1) {
						$scope.selected.index++;
						$scope.selected._id = 'submit_field';
						$rootScope.setActiveField($scope.selected._id, $scope.selected.index);
					}
                };
                $rootScope.prevField = $scope.prevField = function(){
                    if($scope.selected.index > 0){
                        $scope.selected.index = $scope.selected.index - 1;
                        $scope.selected._id = $scope.myform.form_fields[$scope.selected.index]._id;
                        $rootScope.setActiveField($scope.selected._id, $scope.selected.index);
                    }
                };
                
                $scope.hideOverlay = function(){
                    $scope.selected = {
                        _id: '',
                        index: null,
                    };
                };

                /*
                ** Form Display Functions
                */
                $scope.exitStartPage = function(){
                    $scope.myform.startPage.showStart = false;
                    if($scope.myform.form_fields.length > 0){ 
                        $scope.selected._id = $scope.myform.form_fields[0]._id;
                    }
                };

                $scope.submitForm = function(){
                    var _timeElapsed = TimeCounter.stopClock();
					$scope.loading = true;	
                    var form = _.cloneDeep($scope.myform);
                    form.timeElapsed = _timeElapsed;

                    form.percentageComplete = $filter('formValidity')($scope.myform)/$scope.myform.visible_form_fields.length*100;
                    delete form.visible_form_fields;

                    $scope.submitPromise = $http.post('/forms/'+$scope.myform._id, form)
                        .success(function(data, status, headers){
                            console.log('form submitted successfully');
                            $scope.myform.submitted = true;
                        })
                        .error(function(error){
							$scope.loading = false;
                            console.log(error);
                            $scope.error = error.message;
                        });
                };

                //Load our form when the page is ready
                angular.element(document).ready(function() {
                    $scope.reloadForm();
                });

            }
        };
    }
]);
