// Backbone Application View: Certificate Details

define([
    'jquery',
    'underscore',
    'underscore.string',
    'gettext',
    'js/views/baseview',
    'js/certificates/models/signatory',
    'js/certificates/views/signatory_details',
    'common/js/components/utils/view_utils',
    'jquery.smoothScroll',
    'text!templates/certificate-details.underscore'
],
function($, _, str, gettext, BaseView, SignatoryModel, SignatoryDetailsView, ViewUtils, smoothScroll,
         certificateDetailsTemplate) {
    'use strict';
    var CertificateDetailsView = BaseView.extend({
        tagName: 'div',
        events: {
            'click .edit': 'editCertificate'
        },

        className: function() {
            // Determine the CSS class names for this model instance
            return [
                'collection',
                'certificates',
                'certificate-details'
            ].join(' ');
        },

        initialize: function() {
            // Set up the initial state of the attributes set for this model instance
            this.showDetails = true;
            this.listenTo(this.model, 'change', this.render);
        },

        editCertificate: function(event) {
            // Flip the model into 'editing' mode
            if (event && event.preventDefault) { event.preventDefault(); }
            var self = this;
            if (this.model.get('is_active') === true) {
                ViewUtils.confirmThenRunOperation(
                    gettext('Edit this certificate?'),
                    gettext('This certificate has already been activated and is live. Are you sure you want to continue editing?'),
                    gettext('Yes, allow edits to the active Certificate'),
                    function() {
                        return self.model.set('editing', true);
                    }
                );
            } else {
                this.model.set('editing', true);
            }
        },

        render: function(showDetails) {
            // Assemble the details view for this model
            // Expand to show all model data, if requested
            var attrs = $.extend({}, this.model.attributes, {
                index: this.model.collection.indexOf(this.model),
                showDetails: this.showDetails || showDetails || false
            });
            this.$el.html(_.template(certificateDetailsTemplate)(attrs));
            if (this.showDetails || showDetails) {
                var self = this;
                this.model.get('signatories').each(function(modelSignatory) {
                    var signatory_detail_view = new SignatoryDetailsView({model: modelSignatory});
                    self.$('div.signatory-details-list').append($(signatory_detail_view.render().$el));
                });
            }

            if (this.model.collection.length > 0 && window.certWebPreview) {
                window.certWebPreview.show();
            }
            $.smoothScroll({
                offset: 0,
                easing: 'swing',
                speed: 1000
            });
            return this;
        }
    });
    return CertificateDetailsView;
});