/*-
 * ~~~~~~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('entaxyPasswordInput', {
        bindings: {
            name: '<',
            model: '=',
            confirmationModel: '=',
            ignoreConfirmationValue: '=',
            readonly: '<',
            setFocused: '<',
            errors: '='
        },
        template:
        `
          <div class="password-input">
            <input type="{{$ctrl.type}}" class="form-control" ng-model="$ctrl.model" ng-readonly="$ctrl.readonly"
                  autocomplete="new-password" set-focused="$ctrl.setFocused">
            <span ng-class="{'fa fa-eye': !$ctrl.isVisible(), 'fa fa-eye-slash': $ctrl.isVisible()}"
                  ng-click="$ctrl.view()"></span>
          </div>
          <input type="{{$ctrl.type}}" class="form-control confirmation-password-input"
                ng-model="$ctrl.confirmationModel" ng-if="!$ctrl.readonly"
                placeholder="confirm password here" ng-show="$ctrl.model && !$ctrl.ignoreConfirmationValue">
        `,
        controller: entaxyPasswordInputController
    })
    .name;

    function entaxyPasswordInputController($scope) {
        'ngInject';

        let ctrl = this;
        const TYPES = {
            PASSWORD: 'password',
            TEXT: 'text'
        }

        ctrl.$onInit = function() {
            ctrl.type = TYPES.PASSWORD;
        }

        ctrl.view = function () {
            ctrl.type = ctrl.isVisible() ? TYPES.PASSWORD : TYPES.TEXT;
        }

        ctrl.isVisible = function () {
            return ctrl.type !== TYPES.PASSWORD;
        }

        $scope.$watch('$ctrl.model', function () {
            if (ctrl.ignoreConfirmationValue && ctrl.valueAssigned) {
                ctrl.ignoreConfirmationValue = false;
            }
            if (!ctrl.ignoreConfirmationValue) {
                validate();
            } else {
                ctrl.valueAssigned = true;
            }
        })

        $scope.$watch('$ctrl.confirmationModel', function () {
            if (!ctrl.ignoreConfirmationValue) {
                validate();
            }
        });

        function validate() {
            let message = Entaxy.ERROR_MESSAGE.PASSWORD_CONFIRMATION;
            if (ctrl.errors) {
                if (ctrl.model && ctrl.model !== ctrl.confirmationModel) {
                    ctrl.errors[ctrl.name] = message;
                } else {
                    if (ctrl.errors[ctrl.name] === message) {
                        ctrl.errors[ctrl.name] = undefined;
                    }
                }
            } else {
                if (ctrl.confirmationModel !== ctrl.model) {
                    ctrl.errors = {[ctrl.name]: message};
                }
            }
        }
    }
    entaxyPasswordInputController.$inject = ['$scope'];

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