const Mn       = require('backbone.marionette');
const App      = require('../main');
const template = require('./password.ejs');

require('jquery-serializejson');

module.exports = Mn.View.extend({
    template:  template,
    className: 'modal-dialog',

    ui: {
        form:           'form',
        buttons:        '.modal-footer button',
        cancel:         'button.cancel',
        save:           'button.save',
        newSecretError: '.new-secret-error',
        generalError:   '#error-info',
    },

    events: {
        'click @ui.save': function (e) {
            e.preventDefault();
            this.ui.newSecretError.hide();
            this.ui.generalError.hide();
            let form = this.ui.form.serializeJSON();

            if (form.new_password1 !== form.new_password2) {
                this.ui.newSecretError.text('Passwords do not match!').show();
                return;
            }

            let data = {
                type:    'password',
                current: form.current_password,
                secret:  form.new_password1
            };

            this.ui.buttons.prop('disabled', true).addClass('btn-disabled');
            App.Api.Users.setPassword(this.model.get('id'), data)
                .then(() => {
                    App.UI.closeModal();
                    App.Controller.showUsers();
                })
                .catch(err => {
                    // Change error message to make it a little clearer
                    if (err.message === 'Invalid password') {
                        err.message = 'Current password is invalid';
                    }
                    this.ui.generalError.text(err.message).show();
                    this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
                });
        }
    },

    isSelf: function () {
        return App.Cache.User.get('id') === this.model.get('id');
    },

    templateContext: function () {
        return {
            isSelf: this.isSelf.bind(this)
        };
    },

    onRender: function () {
        this.ui.newSecretError.hide();
        this.ui.generalError.hide();
    },
});