$('#tutorial').on('click', function () {
    $(document).ready(async function () {
        const driver = new Driver({
            doneBtnText: 'Sair',
            closeBtnText: 'Fechar',
            nextBtnText: 'Próximo',
            prevBtnText: 'Anterior',
            allowClose: false
        });
        driver.defineSteps([{
            element: '#btn-filtros',
            popover: {
                title: 'Botão Filtros',
                description: 'Clique aqui para abrir os campos disponíveis de filtro.',
                position: 'right'
            }
        },
        {
            element: '#collapseFiltros',
            popover: {
                title: 'Filtros Disponíveis',
                description: 'Filtre os dados conforme sua necessidade.',
                position: 'top'
            }
        },
        {
            element: '#tabelaRegistros_wrapper',
            popover: {
                title: 'Registros bloqueados',
                description: 'Aqui você verá os registros bloqueados, ou seja, que ficaram presos por algum usuário.',
                position: 'top'
            }
        },
        {
            element: '#btn-liberar',
            popover: {
                title: 'Botão Liberar',
                description: 'Aqui você efetuará a liberação dos registros selecionados na lista.',
                position: 'top'
            }
        }
        ]);
        //inicio tour

        driver.start();

        // inicior tuor
        //final
    });
});
$(document).ready(async function () {
    componenteFiltro('usuario2', true, false, '', [`CODIGO <> '9999'`]);

    $('#txtDashboard').pesquisa_variosServerside(1, '{ "tabela":"DASH_WEB", "camposSelect":["ID", "NOME"],  "where": null}', "ID", "NOME");
    $("#btnDashboard").pesquisa_serversideSel("#txtDashboard", `{"tabela":"DASH_WEB", "camposSelect":[ "ID", "NOME" ], "where": null}`, "Pesquisa Dash");
    $('#btnLimparDashboard').on('click', function () {
        $('#txtDashboard').empty().trigger('change');
    });

    async function buscaRegistros() {
        try {
            $.LoadingOverlay("Show");
            try {
                const usuario = await formataListas($('#txtUsuario2').val().toString()) ? ` AND ACESSO_USUARIOS.CODIGO IN (${await formataListas($('#txtUsuario2').val().toString())})` : '';
                const dashboard = await formataListas($('#txtDashboard').val().toString()) !== '' ? ` AND DASH_WEB.ID IN (${await formataListas($('#txtDashboard').val().toString())})` : '';
                const pesquisa = {
                    tabela: 'ACESSO_USUARIOS',
                    camposSelect: ['(SELECT MAX(CONSULTA) CONSULTA FROM [DASH_ACESSO_WEB] DASH_ACESSO_WEB WHERE DASH_ACESSO_WEB.ID_DASH = DASH_WEB.ID AND DASH_ACESSO_WEB.CODIGO = ACESSO_USUARIOS.CODIGO) LIBERADO',
                        'ACESSO_USUARIOS.CODIGO', 'ACESSO_USUARIOS.NOME', 'DASH_WEB.ID ID_DASH', 'DASH_WEB.NOME NOME_DASH'],
                    leftJoin: [{ tabela: 'DASH_WEB', condicao: '1 = 1' }],
                    where: [`ACESSO_USUARIOS.CODIGO <> '9999' ${usuario} ${dashboard}`]
                }
                //adicionar where dos filtros
                const json = await retornaJsonPesquisaPadrao(JSON.stringify(pesquisa));
                return json;

            } catch (error) {
                console.error(error);
                msgErro('Não foi possível buscar os dados.');
            }
        } finally {
            $.LoadingOverlay("Hide");
        }
    }

    async function gravaAcesso(objeto) {
        try {
            const usuarios = await formataListas($('#txtUsuario2').val().toString());
            const url = `/sisplan/dashboard/v1/acesso_dashboard?CODUSUARIO=${usuarios}&`;
            var response = await requisicao('POST', url, `JSON=${encodeURIComponent(JSON.stringify(objeto))}`, null);

            if (!response) {
                return false;
            }

            if (response.status != 200) {
                msgErro(jsonStr['RESULT'][0].mensagem);
                return false;
            }
            return true;
        } catch (error) {
            console.error(error);
            return false;
        }
    }

    $('#btn-liberar').on('click', async function () {
        const registros = [];
        for (let i = 0; i < $('#tabelaRegistros').DataTable().rows().count(); i++) {
            const dados = $('#tabelaRegistros').DataTable().row(i).data();
            const registro = {
                ID_DASH: dados.ID_DASH,
                CODIGO: dados.CODIGO,
                LIBERADO: dados.LIBERADO
            }
            registros.push(registro);
        }
        const objeto = {
            acessos: registros
        }
        const gravadoComSucesso = await gravaAcesso(objeto);
        if (gravadoComSucesso) {
            msgSucesso('Processo concluído');
        } else {
            msgErro('Erro ao liberar Acessos');
            return;
        }
        $('#btn-consultar').trigger('click');
    });

    $('#check_todos').on('change', function () {
        $('.campoCheck').prop('checked', $('#check_todos').prop('checked'));
        funcaoChangeCheck();
        $('.campoCheck').trigger('change');
    });

    $('#btnLimparFiltros').click(async function () {
        $('#txtUsuario2').empty().trigger('change');
        $('#txtDashboard').empty().trigger('change');
    });

    $('#btn-consultar').on('click', async function () {
        var dataSet = await buscaRegistros();
        var dataSetCols = [];

        if (dataSet.length > 0) {
            var keys = Object.keys(dataSet[0]);
            for (var k in keys) {
                dataSetCols.push({
                    'title': keys[k],
                    'data': keys[k]
                });
            }
            dataSetCols[0] = { ...dataSetCols[0], width: '20px' }
            dataSetCols[0].render = function (data, type, row, meta) {
                // Se o DataTables estiver FILTRANDO ou ORDENANDO, use o valor bruto ('S' ou 'N')
                if (type === 'filter' || type === 'sort') {
                    return row.LIBERADO;
                }

                // Se for para EXIBIÇÃO (display), retorna o HTML do checkbox
                const estaLiberado = row.LIBERADO === 'S';
                return '<div class="group-default form-group">' +
                    '<div class="relative">' +
                    `<div class="icheck-primary"><input ${estaLiberado ? 'checked= "checked"' : ''} style="height:20px" type="checkbox" id="check_col_${meta.row}_row_${meta.col}" class="input-default focus form-control validate campoCheck ${estaLiberado ? 'selecionado' : ''}"><label for="check_col_${meta.row}_row_${meta.col}"></label></div> ` +
                    '</div>' +
                    '</div>';
            }


            $('#tabelaRegistros').DataTable({
                paging: true,
                lengthMenu: [[50, 100, 150, 200, -1], [50, 100, 150, 200, 'Todos']],
                filter: true,
                info: false,
                order: false,
                destroy: true,
                "data": dataSet,
                "columns": dataSetCols,
                "columnDefs": [{
                    className: "dt-head-center"
                }]
            });
        } else {
            $('#tabelaRegistros').DataTable({
                autoWidth: true,
                lengthMenu: [[50, 100, 150, 200, -1], [50, 100, 150, 200, 'Todos']],
                destroy: true,
                "scrollCollapse": true,
                "data": dataSet,
                "columnDefs": [{
                    className: "dt-head-center"
                }]
            });
        }
        $('#tabelaRegistros')
            .on('draw.dt', funcaoChangeCheck)
            .dataTable();

        funcaoChangeCheck();
        $('#modal-filtros').modal('hide');
        $('#cbTodosAcesso').prop('checked', true);
        $('#cbTodosAcesso').trigger('change')
    });

    $('input[name="tipoAcesso"]').on('change', async function () {
        const tipoAcesso = $(this).val();
        const filtro = {
            0: '',
            1: 'S',
            2: 'N'
        }
        $('#tabelaRegistros').DataTable()
            .column(0)
            .search(filtro[tipoAcesso], true, false)
            .draw(false);
    });

    function funcaoChangeCheck() {
        $('.campoCheck').unbind('change');
        $('.campoCheck').on('change', function () {
            const tr = this.closest('tr');
            const consulta = this.checked ? 'S' : 'N';
            const dados = $('#tabelaRegistros').DataTable().row($(tr)).data();
            const novosDados = { ...dados, LIBERADO: consulta }
            $('#tabelaRegistros').DataTable().row($(tr)).data(novosDados);
            if (this.checked) {
                $(this).addClass('selecionado');
            } else {
                $(this).removeClass('selecionado');
            }
        });
    }

    $('#btn-consultar').trigger('click');
});