angular
    .module('universal')
    .controller('ProcessController', function ($scope, $http,$window) {

        $scope.rules = [];
        $http.get('/rules/list/').then(function (response) {
            $scope.rules = response.data
        });

        $scope.posts = [];
        $http.get('/PostProcessing/list/').then(function (response) {
            $scope.posts = response.data
        });

        //инициализируем конфиги из JSON объекта
        $scope.initConfigs = function () {
            var configs = window.configsJSON;
            $scope.configs = {}
            for (var i = 0; i < configs.length; i++) {
                $scope.configs[configs[i]["ID"]] = configs[i]
            }  
        }

        // при изменении полей рейтинга на странице редактирования процесса
        $scope.raitingChange = function (config) {
            $http({
                method: "POST",
                url: '/ruleconfigs/changeRaiting/' + config.ID,
                data: $.param({
                    RaitingCurrent: config.RaitingCurrent,
                    RaitingLimitAutoOffRule: config.RaitingLimitAutoOffRule,
                    RaitingLimit: config.RaitingLimit
                }),
                headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
            }).then(function (response) {
                console.log(response.data.result)
                if (response.data.result) {

                } else {
                    alert("Не удалось сохранить поля рейтинга")
                    window.location.reload()
                }
                }, function () {
                    alert("Не удалось сохранить поля рейтинга")
                    window.location.reload()
                })
        }

        $scope.statements = [{
            name: 'Начало процесса  ',
            code: 'start',
            next: [{
                code: "next",
                name: "следующий"
            }]
        },{
            name: "Исполняемое правило",
            code:"rule-execute",
            parameters: [{
                type: "rule",
                name: "Группа правил:"
            }, {
                type: "rule-config",
                name: "настройки правила"
            }],
            next: [{
                code: "next",
                name: "следующий"
            }]
        }/*, {
                name: "if empty",
                code:"if-empty",
            parameters: [],
            next: [{
                code: "true",
                name: "правда"
            }, {
                code: "false",
                name: "ложь"
            }]
            }*/
        ]
        $scope.ruleSettings = function (statement)
        {
            if (angular.isDefined(statement.config) && statement.config.length > 0) {
                $window.location.href = "/ruleconfigs/edit/" + statement.config
            } else {
                // создаем конфиг
                $http.post('/ruleconfigs/add/', {
                    rule: statement.rule,
                    process: $scope.id
                }).then(function (response) {
                    if (response.data.result) {
                        statement.config = response.data.id;
                        $scope.update().then(function () {
                            $window.location.href = "/ruleconfigs/edit/" + statement.config
                        })
                    }                    
                })
                    
            }
        }
        $scope.delete = function (id) {
            if (confirm('Произойдет удаление правила. Вы уверены?')) {
                function _del(prev, next) {
                    if (!next) return;
                    if (next.hasOwnProperty('config') && next['config'] == id) {
                        if (!next.next) prev.next = null;
                        if (next.next) prev.next = next.next.next;
                    }
                    else _del(next, next.next);
                };
                _del($scope.process.statement, $scope.process.statement.next);

                $scope.update().then(function () {
                    $window.location.href = $window.location.href;
                });
            }
        }
        $scope.update = function () {
            return $http.post('/processes/edit/', {
                id: $scope.id,
                name: $scope.name,
                code: $scope.code,
                DisableAutoOffRule: $scope.DisableAutoOffRule,
                NeedWorkersCount: $scope.NeedWorkersCount,
                postID: $scope.postID,
                description: $scope.description,
                process: JSON.stringify($scope.process)
            })
        }
        $scope.submit = function () {
            $scope.update.then(function (response) {
                $window.location.href = "/processes/"
            })
            return false
        }
        $scope.process = {
            statement: {
                //type: "rule-execute",
                //rule: "d06eb55c-c79b-413d-87f2-9df2442e031f",
                //config:"",
                //next: {
                //    next: {
                //        type: "if-empty",
                //        next: {
                //            false: null,
                //            true: {
                //                type: "rule-execute",
                //                rule: "591cca98-cfa5-42ca-bd53-0ccf0e59d1bc",
                //                config: "",
                //                next: null
                //            }
                //        }
                //    }
                //}
            }
        }

        $scope.confirmClear = function (next) {
            if (confirm("Все последующие правила будут удалены. Вы уверены?")) {
                $scope.process.statement.next[next.code] = null;
                $scope.update();
            }
        }
    });