/*
 * vim: ts=4:sw=4:expandtab
 */
(function () {
    'use strict';
    window.Whisper = window.Whisper || {};

    Whisper.StandaloneRegistrationView = Whisper.View.extend({
        templateName: 'standalone',
        className: 'install main',
        initialize: function() {
            this.accountManager = getAccountManager();

            this.render();

            var number = textsecure.storage.user.getNumber();
            if (number) {
                this.$('input.number').val(number);
            }
            this.phoneView = new Whisper.PhoneInputView({el: this.$('#phone-number-input')});
            this.$('#error').hide();
        },
        events: {
            'submit #form': 'submit',
            'validation input.number': 'onValidation',
            'change #code': 'onChangeCode',
            'click #request-voice': 'requestVoice',
            'click #request-sms': 'requestSMSVerification',
        },
        submit: function(e) {
            e.preventDefault();
            var number = this.phoneView.validateNumber();
            var verificationCode = $('#code').val().replace(/\D+/g, "");

            this.accountManager.registerSingleDevice(number, verificationCode).then(function() {
                this.$el.trigger('openInbox');
            }.bind(this)).catch(this.log.bind(this));
        },
        log: function (s) {
            console.log(s);
            this.$('#status').text(s);
        },
        validateCode: function() {
            var verificationCode = $('#code').val().replace(/\D/g, '');
            if (verificationCode.length == 6) {
                return verificationCode;
            }
        },
        displayError: function(error) {
            this.$('#error').hide().text(error).addClass('in').fadeIn();
        },
        onValidation: function() {
            if (this.$('#number-container').hasClass('valid')) {
                this.$('#request-sms, #request-voice').removeAttr('disabled');
            } else {
                this.$('#request-sms, #request-voice').prop('disabled', 'disabled');
            }
        },
        onChangeCode: function() {
            if (!this.validateCode()) {
                this.$('#code').addClass('invalid');
            } else {
                this.$('#code').removeClass('invalid');
            }
        },
        requestVoice: function() {
            this.$('#error').hide();
            var number = this.phoneView.validateNumber();
            if (number) {
                this.accountManager.requestVoiceVerification(number).catch(this.displayError.bind(this));
                this.$('#step2').addClass('in').fadeIn();
            } else {
                this.$('#number-container').addClass('invalid');
            }
        },
        requestSMSVerification: function() {
            $('#error').hide();
            var number = this.phoneView.validateNumber();
            if (number) {
                this.accountManager.requestSMSVerification(number).catch(this.displayError.bind(this));
                this.$('#step2').addClass('in').fadeIn();
            } else {
                this.$('#number-container').addClass('invalid');
            }
        }
    });
})();