/**
 * TEMPLATE: widget-datatable.js
 * =============================================
 * Widget com listagem paginada usando FLUIGC.datatable.
 * Componente nativo do Fluig Style Guide.
 *
 * PADRAO DE PRODUCAO (carrossel_imagem_dwp, gridlist):
 * - FLUIGC.datatable com dataRequest apontando para API dataset
 * - renderContent com template Mustache
 * - Header configuravel
 * - Busca, scroll e acoes opcionais
 *
 * RESULTADO:
 * Tabela paginada, com busca e ordenacao,
 * carregando dados automaticamente do dataset.
 */

var ${NOME_WIDGET} = SuperWidget.extend({

    datasetId: null,
    titulo: null,
    datatable: null,

    init: function() {
        if (!this.isEditMode) {
            if (this.datasetId && this.datasetId !== '') {
                this.carregarDatatable();
            }
        }
    },

    bindings: {
        local: {
            'salvar-config': ['click_salvarConfig'],
            'acao-linha': ['click_acaoLinha']
        }
    },

    // =============================================
    // DATATABLE COM FLUIGC
    // =============================================
    carregarDatatable: function() {
        var that = this;

        this.datatable = FLUIGC.datatable('#datatable_' + this.instanceId, {
            // Fonte de dados
            dataRequest: {
                url: '/api/public/ecm/dataset/search?datasetId=' + this.datasetId
                    + '&limit=50&orderby=${COL_ORDENACAO}_ASC&',
                options: {
                    contentType: 'application/json',
                    dataType: 'json'
                },
                root: 'content'
            },

            // Template Mustache para cada linha
            renderContent: '.template-linha-' + this.instanceId,

            // Cabecalho da tabela
            header: [
                { 'title': '${TITULO_COL_1}', 'size': 'col-md-4' },
                { 'title': '${TITULO_COL_2}', 'size': 'col-md-4' },
                { 'title': '${TITULO_COL_3}', 'size': 'col-md-3' },
                { 'title': '',                 'size': 'col-md-1' }
            ],

            // Busca
            search: {
                enabled: true,
                placeholder: 'Buscar...'
            },

            // Scroll infinito
            scroll: {
                enabled: true,
                limit: 20
            },

            // Acoes em lote
            actions: {
                enabled: false
            },

            // Navegacao (paginacao)
            navButtons: {
                enabled: true
            },

            // Mensagem quando vazio
            emptyMessage: '<div class="text-center text-muted">'
                + '<i class="fluigicon fluigicon-info-circle fluigicon-md"></i>'
                + '<p>Nenhum registro encontrado</p></div>',

            // Estilo da tabela
            tableStyle: 'table-striped table-hover',

        }, function(err, data) {
            // Callback apos carregar
            if (err) {
                FLUIGC.toast({
                    message: 'Erro ao carregar dados',
                    type: 'danger'
                });
            }
        });
    },

    // =============================================
    // RECARREGAR DATATABLE
    // =============================================
    recarregarDados: function() {
        if (this.datatable) {
            this.datatable.reload();
        }
    },

    // =============================================
    // ACAO EM LINHA DA TABELA
    // =============================================
    acaoLinha: function(el, ev) {
        var id = $(el).attr('data-id');

        // Exemplo: abrir processo
        // window.open('/portal/p/1/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=' + id);

        // Exemplo: modal de confirmacao
        FLUIGC.message.confirm({
            message: 'Deseja executar acao no item ' + id + '?',
            title: 'Confirmacao',
            labelYes: 'Sim',
            labelNo: 'Cancelar'
        }, function(result) {
            if (result) {
                // Executar acao
            }
        });
    },

    // =============================================
    // SALVAR CONFIGURACAO
    // =============================================
    salvarConfig: function(el, ev) {
        var preferences = {};
        preferences.datasetId = $('#datasetId_' + this.instanceId).val();
        preferences.titulo = $('#titulo_' + this.instanceId).val();

        WCMSpaceAPI.PageService.UPDATEPREFERENCES({
            async: true,
            success: function(data) {
                FLUIGC.toast({ message: data.message, type: 'success' });
            },
            fail: function(xhr, message, errorData) {
                FLUIGC.toast({ message: errorData.message, type: 'danger' });
            }
        }, this.instanceId, preferences);
    }
});
