/*-
 * ~~~~~~licensing~~~~~~
 * entaxy-management-plugin
 * ==========
 * Copyright (C) 2020 - 2025 EmDev LLC
 * ==========
 * You may not use this file except in accordance with the License Terms of the Copyright
 * Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
 * rights to the Software and any copies are the property of the Copyright Holder. Unless
 * it is explicitly allowed the Copyright Holder, the User is prohibited from using the
 * Software for commercial purposes to provide services to third parties.
 * 
 * The Copyright Holder hereby declares that the Software is provided on an "AS IS".
 * Under no circumstances does the Copyright Holder guarantee or promise that the
 * Software provided by him will be suitable or not suitable for the specific purposes
 * of the User, that the Software will meet all commercial and personal subjective
 * expectations of the User, that the Software will work properly, without technical
 * errors, quickly and uninterruptedly.
 * 
 * Under no circumstances shall the Copyright Holder or its Affiliates is not liable
 * to the User for any direct or indirect losses of the User, his expenses or actual
 * damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
 * or damage to data, property, etc.
 * ~~~~~~/licensing~~~~~~
 */
var Entaxy;
(function (Entaxy) {
    Entaxy._module.component('entaxySimpleResourceNameInputModal', {
        bindings: {
            modalInstance: '<',
            resolve: '<'
        },
        template:
        `
          <div class="entaxy-simple-modal-container">
            <div class="modal-header">
              <button type="button" class="close" aria-label="Close" ng-click="$ctrl.cancel()">
                <span class="pficon pficon-close" aria-hidden="true"></span>
              </button>
              <h4 class="modal-title">{{$ctrl.title}}</h4>
            </div>
            <div class="modal-body-small">
              <div class="form-group" ng-class="{'has-error': $ctrl.error}">
                <div class="col-sm-12">
                  <input type="text" class="form-control" ng-model="$ctrl.getSetName" ng-if="!$ctrl.extension"
                        ng-model-options="{getterSetter: true}" ng-trim="false" set-focused="true">
                  <entaxy-input-with-extension model="$ctrl.name" ng-if="$ctrl.extension" set-focused="true"
                        model-without-extension="$ctrl.nameWithoutExtension" extension="$ctrl.extension">
                  </entaxy-input-with-extension>
                  <span class="help-block" ng-show="$ctrl.error">{{$ctrl.error}}</span>
                </div>
              </div>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-default" ng-click="$ctrl.cancel()">Cancel</button>
              <button type="submit" class="btn btn-primary" ng-click="$ctrl.save()">Save</button>
            </div>
          </div>
        `,
        controller: entaxySimpleResourceNameInputModalController
    })
    .name;

    function entaxySimpleResourceNameInputModalController($scope, $uibModal, entaxyHotkeysService) {
        'ngInject';

        let ctrl = this;

        ctrl.$onInit = function() {
            entaxyHotkeysService.setHotkeys($scope, getHotkeysConfigs());

            ctrl.title = ctrl.resolve.title;
            ctrl.type = ctrl.resolve.type ? ctrl.resolve.type : 'Resource';
            ctrl.name = ctrl.resolve.name;
            if (ctrl.name && ctrl.type === 'Resource') {
                let dotIndex = ctrl.name.lastIndexOf('.');
                if (dotIndex > -1) {
                    ctrl.nameWithoutExtension = ctrl.name.slice(0, dotIndex);
                    ctrl.extension = ctrl.name.slice(dotIndex);
                }
            }
            ctrl.names = ctrl.resolve.names;
        }

        ctrl.getSetName = function (newName) {
            return angular.isDefined(newName) ?
                (ctrl.name = ctrl.resolve.replaceSpaces ? newName.replace(' ', '_') : newName) : ctrl.name;
        }

        ctrl.cancel = function(reason) {
            ctrl.modalInstance.dismiss(reason);
        }

        ctrl.save = function() {
            ctrl.error = validate();
            if (!ctrl.error) {
                ctrl.modalInstance.close(ctrl.resolve.replaceSpaces ? ctrl.name : ctrl.name.trim());
            }
        }

        function validate() {
            let error;
            if (isEmpty(ctrl.name) || (ctrl.extension && isEmpty(ctrl.nameWithoutExtension))) {
                return ctrl.type + ' name must not be empty';
            }
            ['/', '\\', ':', '*', '?', '<', '>', '|'].forEach((symbol) => {
                if (ctrl.name.indexOf(symbol) >= 0) {
                    error = ctrl.type + ' name must not include symbols /\\:*?<>|';
                }
            });
            ctrl.names.forEach((name) => {
                if (name === ctrl.name) {
                    error = ctrl.type + ' name must be unique';
                }
            });
            return error;
        }

        function isEmpty(value) {
            return !value || value.length == 0 || value.trim().length == 0;
        }

        function getHotkeysConfigs() {
            return [
                {
                    ...Entaxy.getSaveHotkeyDescription(),
                    callback: function (event) {
                        event.preventDefault();
                        ctrl.save();
                    }
                }
            ];
        }
    }
    entaxySimpleResourceNameInputModalController.$inject = ['$scope', '$uibModal', 'entaxyHotkeysService'];

})(Entaxy || (Entaxy = {}));
