(function () {
    global.dashModule
        .controller('suppliersAddEditCtrl', ['$scope', '$http', '$', '$translate', 'utilsService', suppliersAddEditCtrl])
        .directive('suppliersAddEdit', [suppliersAddEditDirective]);

    function suppliersAddEditDirective() {
        return {
            restrict: 'E',
            templateUrl: 'suppliers/html/suppliersAddEditFormTemplate'
        };
    }

    function suppliersAddEditCtrl($scope, $http, $, $translate, utilsService) {
        $scope.suppliersFormInit = suppliersFormInit;
        $scope.addEditSupplier = addEditSupplier;
        $scope.data = $scope.data || {};

        function suppliersFormInit(action) {
            $scope.formAction = action;
        }

        function addEditSupplier() {
            const params = $.param({
                idSupplier: $scope.data.id || 0,
                name: $scope.data.name || '',
                phone: $scope.data.phone || '',
                mail: $scope.data.mail || ''
            });
            const url = 'suppliers/api/' + $scope.formAction.toLowerCase() + 'Supplier';

            $http({
                method: 'POST',
                url: url,
                data: params
            }).then(showUpdateMessage, utilsService.onHttpError);
        }

        function showUpdateMessage(response) {
            if (typeof response.data.messages !== 'undefined') {
                response.data.messages.forEach((messageObj) => {
                    const key = messageObj.key ? $translate.instant('suppliers.tables.headers.' + messageObj.key) : '';
                    let translatedMessage = $translate.instant('suppliers.messages.' + messageObj.message);
                    translatedMessage = key !== '' ? key + ': ' + translatedMessage : translatedMessage;
                    utilsService.displayMessage(messageObj.code, translatedMessage);
                    if (typeof $scope.onUpdated !== 'undefined' && messageObj.code === 'success') {
                        $scope.onUpdated();
                    }
                });
            }
        }
    }
})();
