const Mn            = require('backbone.marionette');
const App           = require('../main');
const AuditLogModel = require('../../models/audit-log');
const ListView      = require('./list/main');
const template      = require('./main.ejs');
const ErrorView     = require('../error/main');
const EmptyView     = require('../empty/main');

module.exports = Mn.View.extend({
    id:       'audit-log',
    template: template,

    ui: {
        list_region: '.list-region',
        dimmer:      '.dimmer',
        search:      '.search-form',
        query:       'input[name="source-query"]'
    },

    fetch: App.Api.AuditLog.getAll,

    showData: function(response) {
        this.showChildView('list_region', new ListView({
            collection: new AuditLogModel.Collection(response)
        }));
    },

    showError: function(err) {
        this.showChildView('list_region', new ErrorView({
            code:    err.code,
            message: err.message,
            retry:   function () {
                App.Controller.showAuditLog();
            }
        }));

        console.error(err);
    },

    showEmpty: function() {
        this.showChildView('list_region', new EmptyView({
            title:    App.i18n('audit-log', 'empty'),
            subtitle: App.i18n('audit-log', 'empty-subtitle')
        }));
    },

    regions: {
        list_region: '@ui.list_region'
    },

    events: {
        'submit @ui.search': function (e) {
            e.preventDefault();
            let query = this.ui.query.val();

            this.fetch(['user'], query)
                .then(response => this.showData(response))
                .catch(err => {
                    this.showError(err);
                });
        }
    },

    onRender: function () {
        let view = this;

        view.fetch(['user'])
            .then(response => {
                if (!view.isDestroyed() && response && response.length) {
                    view.showData(response);
                } else {
                    view.showEmpty();
                }
            })
            .catch(err => {
                view.showError(err);
            })
            .then(() => {
                view.ui.dimmer.removeClass('active');
            });
    }
});