// Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors
//
// 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.

angular.module('appenlight.components.applicationsUpdateView', [])
    .component('applicationsUpdateView', {
        templateUrl: 'components/views/applications-update-view/applications-update-view.html',
        controller: applicationsUpdateViewController
    });

applicationsUpdateViewController.$inject = ['$state', 'applicationsNoIdResource', 'applicationsResource', 'applicationsPropertyResource', 'stateHolder', 'AeConfig'];

function applicationsUpdateViewController($state, applicationsNoIdResource, applicationsResource, applicationsPropertyResource, stateHolder, AeConfig) {
    'use strict';
    console.debug('applicationsUpdateView');
    var vm = this;
    vm.$onInit = function () {
        vm.AeConfig = AeConfig;
        vm.$state = $state;
        vm.loading = {application: false};

        vm.groupingOptions = [
            ['url_type', 'Error Type + location'],
            ['url_traceback', 'Traceback + location'],
            ['traceback_server', 'Traceback + Server'],
        ];
        var resourceId = $state.params.resourceId;
        var options = {};
        vm.momentJs = moment;
        vm.formTransferModel = {password: ''};

        // set initial data

        if (resourceId === 'new') {
            vm.resource = {
                resource_id: null,
                slow_report_threshold: 10,
                error_report_threshold: 10,
                allow_permanent_storage: true,
                default_grouping: vm.groupingOptions[1][0]
            };
        } else {
            vm.loading.application = true;
            vm.resource = applicationsResource.get({
                'resourceId': resourceId
            }, function (data) {
                vm.loading.application = false;
            });
        }
    }

    vm.updateBasicForm = function () {
        vm.loading.application = true;
        if (vm.resource.resource_id === null) {
            applicationsNoIdResource.save(null, vm.resource, function (data) {
                stateHolder.AeUser.addApplication(data);
                $state.go('applications.update', {resourceId: data.resource_id});
                setServerValidation(vm.BasicForm);
            }, function (response) {
                if (response.status == 422) {
                    setServerValidation(vm.BasicForm, response.data);
                }
                vm.loading.application = false;
                console.log(vm.BasicForm);
            });
        }
        else {
            applicationsResource.update({resourceId: vm.resource.resource_id},
                vm.resource, function (data) {
                    vm.resource = data;
                    vm.loading.application = false;
                    setServerValidation(vm.BasicForm);
                }, function (response) {
                    if (response.status == 422) {
                        setServerValidation(vm.BasicForm, response.data);
                    }
                    vm.loading.application = false;
                });
        }
    };

    vm.addRule = function () {
        console.log('addrule');
        applicationsPropertyResource.save({
                resourceId: vm.resource.resource_id,
                key: 'postprocessing_rules'
            }, null,
            function (data) {
                vm.resource.postprocessing_rules.push(data);
            }
        );
    };

    vm.regenerateAPIKeys = function(){
        vm.loading.application = true;
        applicationsPropertyResource.save({
                resourceId: vm.resource.resource_id,
                key: 'api_key'
            }, {password: vm.regenerateAPIKeysPassword},
            function (data) {
                vm.resource = data;
                vm.loading.application = false;
                vm.regenerateAPIKeysPassword = '';
                setServerValidation(vm.regenerateAPIKeysForm);
            },
            function (response) {
                if (response.status == 422) {
                    setServerValidation(vm.regenerateAPIKeysForm, response.data);
                    console.log(response.data);
                }
                vm.loading.application = false;
            }
        )
    };

    vm.deleteApplication = function(){
        vm.loading.application = true;
        applicationsPropertyResource.update({
                resourceId: vm.resource.resource_id,
                key: 'delete_resource'
            }, vm.formDeleteModel,
            function (data) {
                stateHolder.AeUser.removeApplicationById(vm.resource.resource_id);
                $state.go('applications.list');
            },
            function (response) {
                if (response.status == 422) {
                    setServerValidation(vm.formDelete, response.data);
                    console.log(response.data);
                }
                vm.loading.application = false;
            }
        );
    };

    vm.transferApplication = function(){
        vm.loading.application = true;
        applicationsPropertyResource.update({
                resourceId: vm.resource.resource_id,
                key: 'owner'
            }, vm.formTransferModel,
            function (data) {
                $state.go('applications.list');
            },
            function (response) {
                if (response.status == 422) {
                    setServerValidation(vm.formTransfer, response.data);
                    console.log(response.data);
                }
                vm.loading.application = false;
            }
        )
    }

}